home *** CD-ROM | disk | FTP | other *** search
Wrap
/* ----------------------------------------------------------------------------- cprefs - preferences for compilers SAS/C: make all ------------------------------------------------------------------------------ */ #include "defs.h" /// "prototypes" Prototype void CloseUserInterface (void); Prototype void CloseWindowSafely (struct WindowSupportInfo *); Prototype struct Node *CreateNode (UBYTE *); Prototype void DefaultGadgetHandler(struct WindowSupportInfo *, UWORD); Prototype void DetachGadgets (struct WindowSupportInfo *, BOOL); Prototype void DiscardInputEvents (struct Window *); Prototype BOOL ExamineListview (struct WindowSupportInfo *, struct Gadget *, struct List **, struct Node **, ULONG *, ULONG *, UWORD *); Prototype void FreeDupes (struct List *, UBYTE *); Prototype void FreeNode (struct Node *); Prototype void FreeNodes (struct List *); Prototype void FreeOptions (struct Options *); Prototype void FreeValue (struct Value *); Prototype struct List *GetValueList (struct Value *); Prototype UWORD GetValueNumber (struct Value *); Prototype UBYTE *GetValueString (struct Value *); Prototype void InitOptions (struct Options *); Prototype void InitSyntax (void); Prototype void LayoutDialog (struct WindowSupportInfo *, UWORD, UWORD); Prototype BOOL LoadOptions (struct Options *, UBYTE *, UWORD, BOOL); Prototype int main (int, char **); Prototype BOOL NameNode (struct Node *, UBYTE *); Prototype struct WindowSupportInfo *OpenDialog (UWORD, UWORD, UWORD, UWORD, UBYTE *, ULONG); Prototype void ReadPage (struct WindowSupportInfo *); Prototype void RefreshGhosting (struct WindowSupportInfo *); Prototype void RefreshPage (struct WindowSupportInfo *); Prototype void RemoveGadgetList (struct Window *, struct Gadget *, UWORD); Prototype UBYTE *RequestPath (UBYTE *, UBYTE *, UBYTE *, BOOL, BOOL); Prototype void ResetOptions (struct Options *, UWORD); Prototype BOOL SaveOptions (struct Options *, UBYTE *); Prototype UWORD ScaleX (struct WindowSupportInfo *, UWORD); Prototype UWORD ScaleY (struct WindowSupportInfo *, UWORD); Prototype void SetOption (struct Options *, UWORD, APTR); Prototype UWORD SetValueNumber (struct Value *, UWORD); Prototype UBYTE *SetValueString (struct Value *, UBYTE *); Prototype BOOL ShowPage (struct WindowSupportInfo *, UWORD); Prototype struct WindowSupportInfo *ShowUserInterface (void); Prototype UBYTE *Tackon (UBYTE *, UBYTE *); Prototype void Warn (UBYTE *, APTR); Prototype void WindowLoop (struct WindowSupportInfo *); /// /// "globals" // global configuration struct Config Config; // global strings #ifdef __SASC UBYTE Version[] = "$VER: " PROGRAMNAME " 1.0 " __AMIGADATE__ "\n\0"; #else UBYTE Version[] = "$VER: " PROGRAMNAME " 1.0 (" __COMMODORE_DATE__ ")\n\0"; #endif UBYTE Assert[] = "ERROR IN LINE %d !"; /* ------------------------------------- Menu ---------------------------------- Menu */ struct NewMenu NewMenu[] = { NM_TITLE, "Compiler Options", NULL, 0, 0, NULL, NM_ITEM , "Reset all options", "R" , 0, 0, NULL, NM_ITEM , "Reset this page", "C" , 0, 0, NULL, NM_ITEM , "About..." , "?" , 0, 0, NULL, NM_END, NULL, NULL, 0, 0L, NULL }; /// /// "globals (gcc)" /* ------------------------------- Connectivity -------------------------------- The connectivity table describes how gadgets interact (e.g. an "add" gadget adding entries to another gadget). */ #ifdef TARGET_GCC struct Connectivity Connectivity[] = { // DIALOG PAGE GADGET (SOURCE) GADGET (TARGET) ACTION { PAGE_COMPILER, GD_GLOBALINCLUDES, GD_GLOBALINCLUDES, ACTION_REFRESH }, { PAGE_COMPILER, GD_ADDGLOBALINCLUDE, GD_GLOBALINCLUDES, ACTION_REQFOLDER }, { PAGE_COMPILER, GD_DELGLOBALINCLUDE, GD_GLOBALINCLUDES, ACTION_DEL }, { PAGE_COMPILER, GD_EDITGLOBALINCLUDE, GD_GLOBALINCLUDES, ACTION_EDIT }, { PAGE_COMPILER, GD_LOCALINCLUDES, GD_LOCALINCLUDES, ACTION_REFRESH }, { PAGE_COMPILER, GD_ADDLOCALINCLUDE, GD_LOCALINCLUDES, ACTION_REQFOLDER }, { PAGE_COMPILER, GD_DELLOCALINCLUDE, GD_LOCALINCLUDES, ACTION_DEL }, { PAGE_COMPILER, GD_EDITLOCALINCLUDE, GD_LOCALINCLUDES, ACTION_EDIT }, { PAGE_COMPILER, GD_GETSPECSFILE, GD_SPECSFILE, ACTION_REQFILE }, { PAGE_PREPROCESSOR, GD_DEFINES, GD_DEFINES, ACTION_REFRESH }, { PAGE_PREPROCESSOR, GD_ADDDEFINE, GD_DEFINES, ACTION_ADD }, { PAGE_PREPROCESSOR, GD_DELDEFINE, GD_DEFINES, ACTION_DEL }, { PAGE_PREPROCESSOR, GD_EDITDEFINE, GD_DEFINES, ACTION_EDIT }, { PAGE_PREPROCESSOR, GD_UNDEFINES, GD_UNDEFINES, ACTION_REFRESH }, { PAGE_PREPROCESSOR, GD_ADDUNDEFINE, GD_UNDEFINES, ACTION_ADD }, { PAGE_PREPROCESSOR, GD_DELUNDEFINE, GD_UNDEFINES, ACTION_DEL }, { PAGE_PREPROCESSOR, GD_EDITUNDEFINE, GD_UNDEFINES, ACTION_EDIT }, { PAGE_MESSAGES, GD_ENABLED, GD_ENABLED, ACTION_REFRESH }, { PAGE_MESSAGES, GD_ADDENABLED, GD_ENABLED, ACTION_POP }, { PAGE_MESSAGES, GD_DELENABLED, GD_ENABLED, ACTION_DEL }, { PAGE_MESSAGES, GD_EDITENABLED, GD_ENABLED, ACTION_EDIT }, { PAGE_MESSAGES, GD_DISABLED, GD_DISABLED, ACTION_REFRESH }, { PAGE_MESSAGES, GD_ADDDISABLED, GD_DISABLED, ACTION_POP }, { PAGE_MESSAGES, GD_DELDISABLED, GD_DISABLED, ACTION_DEL }, { PAGE_MESSAGES, GD_EDITDISABLED, GD_DISABLED, ACTION_EDIT }, { PAGE_LINKER, GD_OBJECTS, GD_OBJECTS, ACTION_REFRESH }, { PAGE_LINKER, GD_ADDOBJECT, GD_OBJECTS, ACTION_REQFILE }, { PAGE_LINKER, GD_DELOBJECT, GD_OBJECTS, ACTION_DEL }, { PAGE_LINKER, GD_EDITOBJECT, GD_OBJECTS, ACTION_EDIT }, { PAGE_LINKER, GD_LIBPATHS, GD_LIBPATHS, ACTION_REFRESH }, { PAGE_LINKER, GD_ADDLIBPATH, GD_LIBPATHS, ACTION_REQFOLDER }, { PAGE_LINKER, GD_DELLIBPATH, GD_LIBPATHS, ACTION_DEL }, { PAGE_LINKER, GD_EDITLIBPATH, GD_LIBPATHS, ACTION_EDIT }, { PAGE_SPECIAL, GD_OPTIONS, GD_OPTIONS, ACTION_REFRESH }, { PAGE_SPECIAL, GD_ADDOPTION, GD_OPTIONS, ACTION_ADD }, { PAGE_SPECIAL, GD_DELOPTION, GD_OPTIONS, ACTION_DEL }, { PAGE_SPECIAL, GD_EDITOPTION, GD_OPTIONS, ACTION_EDIT }, PAGE_MAXIMUM }; /* ------------------------------------ Syntax --------------------------------- Global syntax table with "rules". This table describes all options, their default values, associated gadgets etc. Order in this table is important if entries have similar templates. For example, "-dontwarn=-1" is listed before "-dontwarn=*" because it is a specal case of "-dontwarn=*" (and as such has higher precedence). Options which are displayed on multiple pages have a RULE_DONOTSAVE flag set in their secondary entry because the secondary entry will only be used to sync with the GUI, not for parsing configuration files. */ struct Syntax Syntax[] = { // OPTION IDENTIFIER OPTION TYPE DEFAULT VALUE DIALOG PAGE GADGET ID GADGET TYPE TEMPLATE (or NULL) VALUE ASSOCIATED WITH TEMPLATE FLAGS ACTIVATOR DEACTIVATOR STATUS // index page { OPTION_OPTIMIZE , VALUE_NUMBER , VAL_OPTIMIZE_DEFAULT , PAGE_INDEX , GD_OPTIMIZE , CYCLE_KIND , NULL , UNDEFINED , RULE_DONOTSAVE , NULL, NULL , SYNTAX_ACTIVE }, { OPTION_LINK , VALUE_NUMBER , VAL_LINK_LINK , PAGE_INDEX , GD_LINK , CYCLE_KIND , NULL , UNDEFINED , RULE_DONOTSAVE , NULL, NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_INDEX , GD_DEBUGINFO , CYCLE_KIND , NULL , UNDEFINED , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_INDEX , GD_PROCESSOR , CYCLE_KIND , NULL , UNDEFINED , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_VERBOSE , VALUE_NUMBER , VAL_VERBOSE_DEFAULT , PAGE_INDEX , GD_VERBOSE , CYCLE_KIND , "-v" , VAL_VERBOSE_VERBOSE , 0 , NULL, NULL , SYNTAX_ACTIVE }, { OPTION_TARGET , VALUE_STRING , 0 , PAGE_INDEX , GD_TARGET , STRING_KIND , "-b *" , 0 , 0 , NULL, NULL , SYNTAX_ACTIVE }, // compiler page { OPTION_LOCALINCLUDES , VALUE_LIST , 0 , PAGE_COMPILER , GD_LOCALINCLUDES , LISTVIEW_KIND , "-I*" , 0 , 0 , NULL , "-I-", SYNTAX_ACTIVE }, { OPTION_GLOBALINCLUDES , VALUE_LIST , 0 , PAGE_COMPILER , GD_GLOBALINCLUDES , LISTVIEW_KIND , "-I*" , 0 , 0 , "-I-", NULL , SYNTAX_INACTIVE }, { OPTION_COMPILE , VALUE_NUMBER , VAL_COMPILE_COMPILE , PAGE_COMPILER , GD_COMPILE , CYCLE_KIND , "-E" , VAL_COMPILE_PREPROCESSONLY , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ASSEMBLE , VALUE_NUMBER , VAL_ASSEMBLE_ASSEMBLE , PAGE_COMPILER , GD_ASSEMBLE , CYCLE_KIND , "-S" , VAL_ASSEMBLE_NOASSEMBLE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_INTERMEDIATEFILES , VALUE_NUMBER , VAL_INTERMEDIATEFILES_INTERMEDIATEFILES , PAGE_COMPILER , GD_INTERMEDIATEFILES , CYCLE_KIND , "-pipe" , VAL_INTERMEDIATEFILES_USEPIPE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SPECSFILE , VALUE_STRING , 0 , PAGE_COMPILER , GD_SPECSFILE , STRING_KIND , "-specs=*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DELETEINTERMEDIATE , VALUE_NUMBER , VAL_DELETEINTERMEDIATE_DELETEINTERMEDIATE, PAGE_COMPILER , GD_DELETEINTERMEDIATE, CYCLE_KIND , "-save-temps" , VAL_DELETEINTERMEDIATE_SAVEINTERMEDIATE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTODETECT , VALUE_NUMBER , VAL_AUTODETECT_DEFAULT , PAGE_COMPILER , GD_AUTODETECT , CYCLE_KIND , "-xnone" , VAL_AUTODETECT_AUTODETECTTYPE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTODETECT , VALUE_NUMBER , VAL_AUTODETECT_DEFAULT , PAGE_COMPILER , GD_AUTODETECT , CYCLE_KIND , "-xc" , VAL_AUTODETECT_C , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTODETECT , VALUE_NUMBER , VAL_AUTODETECT_DEFAULT , PAGE_COMPILER , GD_AUTODETECT , CYCLE_KIND , "-xobjective-c" , VAL_AUTODETECT_OBJECTIVEC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTODETECT , VALUE_NUMBER , VAL_AUTODETECT_DEFAULT , PAGE_COMPILER , GD_AUTODETECT , CYCLE_KIND , "-xc++" , VAL_AUTODETECT_CPLUSPLUS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTODETECT , VALUE_NUMBER , VAL_AUTODETECT_DEFAULT , PAGE_COMPILER , GD_AUTODETECT , CYCLE_KIND , "-xc-header" , VAL_AUTODETECT_HEADER , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTODETECT , VALUE_NUMBER , VAL_AUTODETECT_DEFAULT , PAGE_COMPILER , GD_AUTODETECT , CYCLE_KIND , "-xcpp-output" , VAL_AUTODETECT_PREPROCESSEDC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTODETECT , VALUE_NUMBER , VAL_AUTODETECT_DEFAULT , PAGE_COMPILER , GD_AUTODETECT , CYCLE_KIND , "-xc++-cpp-output" , VAL_AUTODETECT_PREPROCESSEDCPLUSPLUS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTODETECT , VALUE_NUMBER , VAL_AUTODETECT_DEFAULT , PAGE_COMPILER , GD_AUTODETECT , CYCLE_KIND , "-xassembler" , VAL_AUTODETECT_ASSEMBLER , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTODETECT , VALUE_NUMBER , VAL_AUTODETECT_DEFAULT , PAGE_COMPILER , GD_AUTODETECT , CYCLE_KIND , "-xassembler-with-cpp" , VAL_AUTODETECT_ASSEMBLERWCPP , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STDINCLUDES , VALUE_NUMBER , VAL_STDINCLUDES_INCLUDES , PAGE_COMPILER , GD_STDINCLUDES , CYCLE_KIND , "-nostdinc" , VAL_STDINCLUDES_NOSTDINCLUDES , 0 , NULL , NULL , SYNTAX_ACTIVE }, // messages page { OPTION_WARNINGS , VALUE_NUMBER , VAL_WARNINGS_WARNINGS , PAGE_MESSAGES , GD_WARNINGS , CYCLE_KIND , "-w" , VAL_WARNINGS_NOWARNINGS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_WARNINGS , VALUE_NUMBER , VAL_WARNINGS_WARNINGS , PAGE_MESSAGES , GD_WARNINGS , CYCLE_KIND , "-Wall" , VAL_WARNINGS_ALLWARNINGS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PEDANTIC , VALUE_NUMBER , VAL_PEDANTIC_NOPEDANTIC , PAGE_MESSAGES , GD_PEDANTIC , CYCLE_KIND , "-pedantic" , VAL_PEDANTIC_PEDANTIC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PEDANTIC , VALUE_NUMBER , VAL_PEDANTIC_NOPEDANTIC , PAGE_MESSAGES , GD_PEDANTIC , CYCLE_KIND , "-pedantic-errors" , VAL_PEDANTIC_PEDANTICERRORS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_EXTRAWARNINGS , VALUE_NUMBER , VAL_EXTRAWARNINGS_NOEXTRAWARNINGS , PAGE_MESSAGES , GD_EXTRAWARNINGS , CYCLE_KIND , "-W" , VAL_EXTRAWARNINGS_EXTRAWARNINGS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ABORT , VALUE_NUMBER , VAL_ABORT_NOABORT , PAGE_MESSAGES , GD_ABORT , CYCLE_KIND , "-Werror" , VAL_ABORT_ABORT , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PERMISSIVECPP , VALUE_NUMBER , VAL_PERMISSIVECPP_DEFAULT , PAGE_MESSAGES , GD_PERMISSIVECPP , CYCLE_KIND , "-fno-permissive" , VAL_PERMISSIVECPP_NOPERMISSIVECPLUSPLUS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PERMISSIVECPP , VALUE_NUMBER , VAL_PERMISSIVECPP_DEFAULT , PAGE_MESSAGES , GD_PERMISSIVECPP , CYCLE_KIND , "-fpermissive" , VAL_PERMISSIVECPP_PERMISSIVECPLUSPLUS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DIAGNOSTICS , VALUE_NUMBER , VAL_DIAGNOSTICS_OPTIONALDIAGNOSTICS , PAGE_MESSAGES , GD_DIAGNOSTICS , CYCLE_KIND , "-fno-optional-diags" , VAL_DIAGNOSTICS_NOOPTDIAGNOSTICS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DISABLED , VALUE_LIST , 0 , PAGE_MESSAGES , GD_DISABLED , LISTVIEW_KIND , "-Wno-*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ENABLED , VALUE_LIST , 0 , PAGE_MESSAGES , GD_ENABLED , LISTVIEW_KIND , "-W*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, // language page { OPTION_ANSI , VALUE_NUMBER , VAL_ANSI_NOANSICCOMPILER , PAGE_LANGUAGE , GD_ANSI , CYCLE_KIND , "-ansi" , VAL_ANSI_ANSICCOMPILER , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LANGUAGE , VALUE_NUMBER , VAL_LANGUAGE_DEFAULT , PAGE_LANGUAGE , GD_LANGUAGE , CYCLE_KIND , "-std=gnu89" , VAL_LANGUAGE_LANGUAGEGNU89 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LANGUAGE , VALUE_NUMBER , VAL_LANGUAGE_DEFAULT , PAGE_LANGUAGE , GD_LANGUAGE , CYCLE_KIND , "-std=gnu9x" , VAL_LANGUAGE_LANGAUGEGNU9X , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LANGUAGE , VALUE_NUMBER , VAL_LANGUAGE_DEFAULT , PAGE_LANGUAGE , GD_LANGUAGE , CYCLE_KIND , "-std=c89" , VAL_LANGUAGE_LANGUAGEC89 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LANGUAGE , VALUE_NUMBER , VAL_LANGUAGE_DEFAULT , PAGE_LANGUAGE , GD_LANGUAGE , CYCLE_KIND , "-std=c9x" , VAL_LANGUAGE_LANGUAGEC9X , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LANGUAGE , VALUE_NUMBER , VAL_LANGUAGE_DEFAULT , PAGE_LANGUAGE , GD_LANGUAGE , CYCLE_KIND , "-std=iso9899:1990" , VAL_LANGUAGE_LANGUAGEISO98991990 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LANGUAGE , VALUE_NUMBER , VAL_LANGUAGE_DEFAULT , PAGE_LANGUAGE , GD_LANGUAGE , CYCLE_KIND , "-std=iso9899:199409" , VAL_LANGUAGE_LANGUAGEISO98991994 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LANGUAGE , VALUE_NUMBER , VAL_LANGUAGE_DEFAULT , PAGE_LANGUAGE , GD_LANGUAGE , CYCLE_KIND , "-std=iso9899:199X" , VAL_LANGUAGE_LANGUAGEISO9899199X , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_INLINEASM , VALUE_NUMBER , VAL_INLINEASM_DEFAULT , PAGE_LANGUAGE , GD_INLINEASM , CYCLE_KIND , "-fasm" , VAL_INLINEASM_INLINEASM , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_INLINEASM , VALUE_NUMBER , VAL_INLINEASM_DEFAULT , PAGE_LANGUAGE , GD_INLINEASM , CYCLE_KIND , "-fno-asm" , VAL_INLINEASM_NOINLINEASM , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_BUILTIN , VALUE_NUMBER , VAL_BUILTIN_DEFAULT , PAGE_LANGUAGE , GD_BUILTIN , CYCLE_KIND , "-fbuiltin" , VAL_BUILTIN_BUILTINFUNCTIONS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_BUILTIN , VALUE_NUMBER , VAL_BUILTIN_DEFAULT , PAGE_LANGUAGE , GD_BUILTIN , CYCLE_KIND , "-fno-builtin" , VAL_BUILTIN_NOBUILTINFUNCTIONS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FREESTANDING , VALUE_NUMBER , VAL_FREESTANDING_DEFAULT , PAGE_LANGUAGE , GD_FREESTANDING , CYCLE_KIND , "-ffreestanding" , VAL_FREESTANDING_FREESTANDING , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FREESTANDING , VALUE_NUMBER , VAL_FREESTANDING_DEFAULT , PAGE_LANGUAGE , GD_FREESTANDING , CYCLE_KIND , "-fhosted" , VAL_FREESTANDING_HOSTED , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_TRIGRAPHS , VALUE_NUMBER , VAL_TRIGRAPHS_NOTRIGRAPHS , PAGE_LANGUAGE , GD_TRIGRAPHS , CYCLE_KIND , "-trigraphs" , VAL_TRIGRAPHS_TRIGRAPHS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_TRADITIONAL , VALUE_NUMBER , VAL_TRADITIONAL_NOTRADITIONALC , PAGE_LANGUAGE , GD_TRADITIONAL , CYCLE_KIND , "-traditional" , VAL_TRADITIONAL_TRADIONALC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CHAR , VALUE_NUMBER , VAL_CHAR_DEFAULT , PAGE_LANGUAGE , GD_CHAR , CYCLE_KIND , "-fsigned-char" , VAL_CHAR_SIGNEDCHAR , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CHAR , VALUE_NUMBER , VAL_CHAR_DEFAULT , PAGE_LANGUAGE , GD_CHAR , CYCLE_KIND , "-funsigned-char" , VAL_CHAR_UNSIGNEDCHAR , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_BITFIELD , VALUE_NUMBER , VAL_BITFIELD_DEFAULT , PAGE_LANGUAGE , GD_BITFIELD , CYCLE_KIND , "-fsigned-bitfields" , VAL_BITFIELD_SIGNEDBITFIELD , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_BITFIELD , VALUE_NUMBER , VAL_BITFIELD_DEFAULT , PAGE_LANGUAGE , GD_BITFIELD , CYCLE_KIND , "-funsigned-bitfields" , VAL_BITFIELD_UNSIGNEDBITFIELD , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CONSTSTRINGS , VALUE_NUMBER , VAL_CONSTSTRINGS_DEFAULT , PAGE_LANGUAGE , GD_CONSTSTRINGS , CYCLE_KIND , "-fno-writable-strings" , VAL_CONSTSTRINGS_STRINGSCONST , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CONSTSTRINGS , VALUE_NUMBER , VAL_CONSTSTRINGS_DEFAULT , PAGE_LANGUAGE , GD_CONSTSTRINGS , CYCLE_KIND , "-fwritable-strings" , VAL_CONSTSTRINGS_WRITEABLESTRINGS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PROMOTEDOUBLE , VALUE_NUMBER , VAL_PROMOTEDOUBLE_DEFAULT , PAGE_LANGUAGE , GD_PROMOTEDOUBLE , CYCLE_KIND , "-fno-allow-single-precision" , VAL_PROMOTEDOUBLE_PROMOTETODOUBLE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PROMOTEDOUBLE , VALUE_NUMBER , VAL_PROMOTEDOUBLE_DEFAULT , PAGE_LANGUAGE , GD_PROMOTEDOUBLE , CYCLE_KIND , "-fallow-single-precision" , VAL_PROMOTEDOUBLE_ALLOWSINGLEPRECISION , 0 , NULL , NULL , SYNTAX_ACTIVE }, // optimizer page { OPTION_FASTCONSTRUCTOR , VALUE_NUMBER , VAL_FASTCONSTRUCTOR_DEFAULT , PAGE_OPTIMIZER , GD_FASTCONSTRUCTOR , CYCLE_KIND , "-felide-constructors" , VAL_FASTCONSTRUCTOR_FASTCONSTRUCTOR , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FASTCONSTRUCTOR , VALUE_NUMBER , VAL_FASTCONSTRUCTOR_DEFAULT , PAGE_OPTIMIZER , GD_FASTCONSTRUCTOR , CYCLE_KIND , "-fno-elide-constructors" , VAL_FASTCONSTRUCTOR_COPYCONSTRUCTOR , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_IMPLICITETEMPLATES , VALUE_NUMBER , VAL_IMPLICITETEMPLATES_DEFAULT , PAGE_OPTIMIZER , GD_IMPLICITETEMPLATES, CYCLE_KIND , "-fimplicit-templates" , VAL_IMPLICITETEMPLATES_IMPLICITETEMPLATES , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_IMPLICITETEMPLATES , VALUE_NUMBER , VAL_IMPLICITETEMPLATES_DEFAULT , PAGE_OPTIMIZER , GD_IMPLICITETEMPLATES, CYCLE_KIND , "-fno-implicit-templates" , VAL_IMPLICITETEMPLATES_NOIMPLICITETEMPLATES, 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , VAL_OPTIMIZER_DEFAULT , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-O1" , VAL_OPTIMIZER_OPTIMIZE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , VAL_OPTIMIZER_DEFAULT , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-O2" , VAL_OPTIMIZER_OPTIMIZEMORE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , VAL_OPTIMIZER_DEFAULT , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-O3" , VAL_OPTIMIZER_OPTIMIZEEVENMORE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , VAL_OPTIMIZER_DEFAULT , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-Os" , VAL_OPTIMIZER_OPTIMIZESIZE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , VAL_OPTIMIZER_DEFAULT , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-O0" , VAL_OPTIMIZER_NOOPTIMIZE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FLOATSINFPU , VALUE_NUMBER , VAL_FLOATSINFPU_DEFAULT , PAGE_OPTIMIZER , GD_FLOATSINFPU , CYCLE_KIND , "-fno-float-store" , VAL_FLOATSINFPU_STOREFLOATSINFPU , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FLOATSINFPU , VALUE_NUMBER , VAL_FLOATSINFPU_DEFAULT , PAGE_OPTIMIZER , GD_FLOATSINFPU , CYCLE_KIND , "-ffloat-store" , VAL_FLOATSINFPU_STOREFLOATSINRAM , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEFERPOP , VALUE_NUMBER , VAL_DEFERPOP_DEFAULT , PAGE_OPTIMIZER , GD_DEFERPOP , CYCLE_KIND , "-fdefer-pop" , VAL_DEFERPOP_DEFERPOP , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEFERPOP , VALUE_NUMBER , VAL_DEFERPOP_DEFAULT , PAGE_OPTIMIZER , GD_DEFERPOP , CYCLE_KIND , "-fno-defer-pop" , VAL_DEFERPOP_NODEFERPOP , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_COPYOPERANDS , VALUE_NUMBER , VAL_COPYOPERANDS_DEFAULT , PAGE_OPTIMIZER , GD_COPYOPERANDS , CYCLE_KIND , "-fno-force-mem" , VAL_COPYOPERANDS_NOCOPYOPERANDS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_COPYOPERANDS , VALUE_NUMBER , VAL_COPYOPERANDS_DEFAULT , PAGE_OPTIMIZER , GD_COPYOPERANDS , CYCLE_KIND , "-fforce-mem" , VAL_COPYOPERANDS_COPYOPERANDS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_COPYPOINTERS , VALUE_NUMBER , VAL_COPYPOINTERS_DEFAULT , PAGE_OPTIMIZER , GD_COPYPOINTERS , CYCLE_KIND , "-fno-force-addr" , VAL_COPYPOINTERS_NOCOPYPOINTERS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_COPYPOINTERS , VALUE_NUMBER , VAL_COPYPOINTERS_DEFAULT , PAGE_OPTIMIZER , GD_COPYPOINTERS , CYCLE_KIND , "-fforce-addr" , VAL_COPYPOINTERS_COPYPOINTERS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FRAMEPOINTER , VALUE_NUMBER , VAL_FRAMEPOINTER_DEFAULT , PAGE_OPTIMIZER , GD_FRAMEPOINTER , CYCLE_KIND , "-fno-omit-frame-pointer" , VAL_FRAMEPOINTER_FRAMEPOINTER , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FRAMEPOINTER , VALUE_NUMBER , VAL_FRAMEPOINTER_DEFAULT , PAGE_OPTIMIZER , GD_FRAMEPOINTER , CYCLE_KIND , "-fomit-frame-pointer" , VAL_FRAMEPOINTER_OPTIMIZEFRAMEPTR , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FASTMATH , VALUE_NUMBER , VAL_FASTMATH_DEFAULT , PAGE_OPTIMIZER , GD_FASTMATH , CYCLE_KIND , "-fno-fast-math" , VAL_FASTMATH_NOFASTMATH , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FASTMATH , VALUE_NUMBER , VAL_FASTMATH_DEFAULT , PAGE_OPTIMIZER , GD_FASTMATH , CYCLE_KIND , "-ffast-math" , VAL_FASTMATH_FASTMATH , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SAVEREGISTERS , VALUE_NUMBER , VAL_SAVEREGISTERS_DEFAULT , PAGE_OPTIMIZER , GD_SAVEREGISTERS , CYCLE_KIND , "-fno-caller-saves" , VAL_SAVEREGISTERS_NOSAVEREGISTERS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SAVEREGISTERS , VALUE_NUMBER , VAL_SAVEREGISTERS_DEFAULT , PAGE_OPTIMIZER , GD_SAVEREGISTERS , CYCLE_KIND , "-fcaller-saves" , VAL_SAVEREGISTERS_SAVEREGISTERS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PEEPHOLE , VALUE_NUMBER , VAL_PEEPHOLE_DEFAULT , PAGE_OPTIMIZER , GD_PEEPHOLE , CYCLE_KIND , "-fpeephole" , VAL_PEEPHOLE_PEEPHOLEOPTIMIZER , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PEEPHOLE , VALUE_NUMBER , VAL_PEEPHOLE_DEFAULT , PAGE_OPTIMIZER , GD_PEEPHOLE , CYCLE_KIND , "-fno-peephole" , VAL_PEEPHOLE_NOPEEPHOLEOPTIMIZER , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SCHEDULER , VALUE_NUMBER , VAL_SCHEDULER_DEFAULT , PAGE_OPTIMIZER , GD_SCHEDULER , CYCLE_KIND , "-fno-schedule-insns" , VAL_SCHEDULER_NOSCHEDULER , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SCHEDULER , VALUE_NUMBER , VAL_SCHEDULER_DEFAULT , PAGE_OPTIMIZER , GD_SCHEDULER , CYCLE_KIND , "-fschedule-insns" , VAL_SCHEDULER_SCHEDULER , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SCHEDULER , VALUE_NUMBER , VAL_SCHEDULER_DEFAULT , PAGE_OPTIMIZER , GD_SCHEDULER , CYCLE_KIND , "-fschedule-insns2" , VAL_SCHEDULER_TWOPASSSCHEDULER , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_EXPENSIVEOPT , VALUE_NUMBER , VAL_EXPENSIVEOPT_DEFAULT , PAGE_OPTIMIZER , GD_EXPENSIVEOPT , CYCLE_KIND , "-fno-expensive-optimizations", VAL_EXPENSIVEOPT_NOEXPENSIVEOPT , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_EXPENSIVEOPT , VALUE_NUMBER , VAL_EXPENSIVEOPT_DEFAULT , PAGE_OPTIMIZER , GD_EXPENSIVEOPT , CYCLE_KIND , "-fexpensive-optimizations" , VAL_EXPENSIVEOPT_EXPENSIVEOPT , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ALIASING , VALUE_NUMBER , VAL_ALIASING_DEFAULT , PAGE_OPTIMIZER , GD_ALIASING , CYCLE_KIND , "-fno-ict-aliasing" , VAL_ALIASING_NOSTRICTALIASING , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ALIASING , VALUE_NUMBER , VAL_ALIASING_DEFAULT , PAGE_OPTIMIZER , GD_ALIASING , CYCLE_KIND , "-fstrict-aliasing" , VAL_ALIASING_STRICTALIASING , 0 , NULL , NULL , SYNTAX_ACTIVE }, // linker page { OPTION_LINK , VALUE_NUMBER , VAL_LINKER_LINK , PAGE_LINKER , GD_LINKER , CYCLE_KIND , "-c" , VAL_LINKER_NOLINK , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OBJECTS , VALUE_LIST , 0 , PAGE_LINKER , GD_OBJECTS , LISTVIEW_KIND , "-l*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LIBPATHS , VALUE_LIST , 0 , PAGE_LINKER , GD_LIBPATHS , LISTVIEW_KIND , "-L*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STARTUPCODE , VALUE_NUMBER , VAL_STARTUPCODE_STARTUPCODE , PAGE_LINKER , GD_STARTUPCODE , CYCLE_KIND , "-nostartfiles" , VAL_STARTUPCODE_NOSTARTUPCODE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STDLIBS , VALUE_NUMBER , VAL_STDLIBS_STANDARDLIBS , PAGE_LINKER , GD_STDLIBS , CYCLE_KIND , "-nostdlib" , VAL_STDLIBS_NOSTANDARDLIBS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEFAULTLIBS , VALUE_NUMBER , VAL_DEFAULTLIBS_DEFAULTLIBS , PAGE_LINKER , GD_DEFAULTLIBS , CYCLE_KIND , "-nodefaultlibs" , VAL_DEFAULTLIBS_NODEFAULTLIBS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STRIPSYMBOLS , VALUE_NUMBER , VAL_STRIPSYMBOLS_NOSTRIPSYMBOLS , PAGE_LINKER , GD_STRIPSYMBOLS , CYCLE_KIND , "-s" , VAL_STRIPSYMBOLS_STRIPSYMBOLS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DYNAMICLINKING , VALUE_NUMBER , VAL_DYNAMICLINKING_DYNAMICLINKING , PAGE_LINKER , GD_DYNAMICLINKING , CYCLE_KIND , "-static" , VAL_DYNAMICLINKING_STATICLINKING , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SHAREDOBJ , VALUE_NUMBER , VAL_SHAREDOBJ_NOSHAREDOBJECT , PAGE_LINKER , GD_SHAREDOBJ , CYCLE_KIND , "-shared" , VAL_SHAREDOBJ_SHAREDOBJECT , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SYMBOLICREFS , VALUE_NUMBER , VAL_SYMBOLICREFS_NOSYMBOLICREFS , PAGE_LINKER , GD_SYMBOLICREFS , CYCLE_KIND , "-symbolic" , VAL_SYMBOLICREFS_SYMBOLICREFS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_IXEMUL , VALUE_NUMBER , VAL_IXEMUL_IXEMUL , PAGE_LINKER , GD_IXEMUL , CYCLE_KIND , "-noixemul" , VAL_IXEMUL_LIBNIX , 0 , NULL , NULL , SYNTAX_ACTIVE }, // ppc page { OPTION_PPCBITALIGN , VALUE_NUMBER , VAL_PPCBITALIGN_DEFAULT , PAGE_PPC , GD_PPCBITALIGN , CYCLE_KIND , "-mbit-align" , VAL_PPCBITALIGN_BITALIGN , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCBITALIGN , VALUE_NUMBER , VAL_PPCBITALIGN_DEFAULT , PAGE_PPC , GD_PPCBITALIGN , CYCLE_KIND , "-mno-bit-align" , VAL_PPCBITALIGN_NOBITALIGN , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCRELOCATABLE , VALUE_NUMBER , VAL_PPCRELOCATABLE_DEFAULT , PAGE_PPC , GD_PPCRELOCATABLE , CYCLE_KIND , "-mno-relocatable@" , VAL_PPCRELOCATABLE_NORELOCATABLE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCRELOCATABLE , VALUE_NUMBER , VAL_PPCRELOCATABLE_DEFAULT , PAGE_PPC , GD_PPCRELOCATABLE , CYCLE_KIND , "-mrelocatable" , VAL_PPCRELOCATABLE_RELOCATBALE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCFULLTOC , VALUE_NUMBER , VAL_PPCFULLTOC_DEFAULT , PAGE_PPC , GD_PPCFULLTOC , CYCLE_KIND , "-mfull-toc" , VAL_PPCFULLTOC_FULLTOC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCFULLTOC , VALUE_NUMBER , VAL_PPCFULLTOC_DEFAULT , PAGE_PPC , GD_PPCFULLTOC , CYCLE_KIND , "-mminimal-toc" , VAL_PPCFULLTOC_MINIMALTOC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCFMADD , VALUE_NUMBER , VAL_PPCFMADD_DEFAULT , PAGE_PPC , GD_PPCFMADD , CYCLE_KIND , "-mfused-madd" , VAL_PPCFMADD_USEFMADDFMSUB , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCFMADD , VALUE_NUMBER , VAL_PPCFMADD_DEFAULT , PAGE_PPC , GD_PPCFMADD , CYCLE_KIND , "-mno-fused-madd" , VAL_PPCFMADD_NOUSEFMADDFMSUB , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCABI , VALUE_NUMBER , VAL_PPCABI_DEFAULT , PAGE_PPC , GD_PPCABI , CYCLE_KIND , "-maix32" , VAL_PPCABI_32BITABI , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCABI , VALUE_NUMBER , VAL_PPCABI_DEFAULT , PAGE_PPC , GD_PPCABI , CYCLE_KIND , "-maix64" , VAL_PPCABI_64BITABI , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCFPU , VALUE_NUMBER , VAL_PPCFPU_DEFAULT , PAGE_PPC , GD_PPCFPU , CYCLE_KIND , "-msoft-float" , VAL_PPCFPU_NOFPU , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCFPU , VALUE_NUMBER , VAL_PPCFPU_DEFAULT , PAGE_PPC , GD_PPCFPU , CYCLE_KIND , "-mhard-float" , VAL_PPCFPU_FPU , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCSTRICTALIGN , VALUE_NUMBER , VAL_PPCSTRICTALIGN_DEFAULT , PAGE_PPC , GD_PPCSTRICTALIGN , CYCLE_KIND , "-mstrict-align" , VAL_PPCSTRICTALIGN_STRICTALIGN , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCSTRICTALIGN , VALUE_NUMBER , VAL_PPCSTRICTALIGN_DEFAULT , PAGE_PPC , GD_PPCSTRICTALIGN , CYCLE_KIND , "-mno-strict-align" , VAL_PPCSTRICTALIGN_NOSTRICTALIGN , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCRELOCATABLELIB , VALUE_NUMBER , VAL_PPCRELOCATABLELIB_DEFAULT , PAGE_PPC , GD_PPCRELOCATABLELIB , CYCLE_KIND , "-mno-relocatable-lib" , VAL_PPCRELOCATABLELIB_NORELOCATABLELIB , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCRELOCATABLELIB , VALUE_NUMBER , VAL_PPCRELOCATABLELIB_DEFAULT , PAGE_PPC , GD_PPCRELOCATABLELIB , CYCLE_KIND , "-mrelocatable-lib" , VAL_PPCRELOCATABLELIB_RELOCATABLELIB , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCTOC , VALUE_NUMBER , VAL_PPCTOC_DEFAULT , PAGE_PPC , GD_PPCTOC , CYCLE_KIND , "-mtoc" , VAL_PPCTOC_TOC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCTOC , VALUE_NUMBER , VAL_PPCTOC_DEFAULT , PAGE_PPC , GD_PPCTOC , CYCLE_KIND , "-mno-toc" , VAL_PPCTOC_NOTOC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCENDIAN , VALUE_NUMBER , VAL_PPCENDIAN_DEFAULT , PAGE_PPC , GD_PPCENDIAN , CYCLE_KIND , "-mlittle-endian" , VAL_PPCENDIAN_LITTLEENDIAN , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCENDIAN , VALUE_NUMBER , VAL_PPCENDIAN_DEFAULT , PAGE_PPC , GD_PPCENDIAN , CYCLE_KIND , "-mlittle" , VAL_PPCENDIAN_LITTLEENDIAN , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCENDIAN , VALUE_NUMBER , VAL_PPCENDIAN_DEFAULT , PAGE_PPC , GD_PPCENDIAN , CYCLE_KIND , "-mbig-endian" , VAL_PPCENDIAN_BIGENDIAN , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCENDIAN , VALUE_NUMBER , VAL_PPCENDIAN_DEFAULT , PAGE_PPC , GD_PPCENDIAN , CYCLE_KIND , "-mbig" , VAL_PPCENDIAN_BIGENDIAN , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCCALL , VALUE_NUMBER , VAL_PPCCALL_DEFAULT , PAGE_PPC , GD_PPCCALL , CYCLE_KIND , "-mcall-sysv" , VAL_PPCCALL_CALLSSYSIV , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCCALL , VALUE_NUMBER , VAL_PPCCALL_DEFAULT , PAGE_PPC , GD_PPCCALL , CYCLE_KIND , "-mcall-aix" , VAL_PPCCALL_CALLSAIX , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCCALL , VALUE_NUMBER , VAL_PPCCALL_DEFAULT , PAGE_PPC , GD_PPCCALL , CYCLE_KIND , "-mcall-linux" , VAL_PPCCALL_CALLSLINUX , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCCALL , VALUE_NUMBER , VAL_PPCCALL_DEFAULT , PAGE_PPC , GD_PPCCALL , CYCLE_KIND , "-mcall-solaris" , VAL_PPCCALL_CALLSSOLARIS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCPROTOTYPED , VALUE_NUMBER , VAL_PPCPROTOTYPED_DEFAULT , PAGE_PPC , GD_PPCPROTOTYPED , CYCLE_KIND , "-mprototype" , VAL_PPCPROTOTYPED_PROTOTYPED , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCPROTOTYPED , VALUE_NUMBER , VAL_PPCPROTOTYPED_DEFAULT , PAGE_PPC , GD_PPCPROTOTYPED , CYCLE_KIND , "-mno-prototype" , VAL_PPCPROTOTYPED_NOPROTOTYPED , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCEABI , VALUE_NUMBER , VAL_PPCEABI_DEFAULT , PAGE_PPC , GD_PPCEABI , CYCLE_KIND , "-meabi" , VAL_PPCEABI_EMBEDDEDABI , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCEABI , VALUE_NUMBER , VAL_PPCEABI_DEFAULT , PAGE_PPC , GD_PPCEABI , CYCLE_KIND , "-mno-eabi" , VAL_PPCEABI_NOEMBEDDEDABI , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCDATA , VALUE_NUMBER , VAL_PPCDATA_DEFAULT , PAGE_PPC , GD_PPCDATA , CYCLE_KIND , "-msdata=default" , VAL_PPCDATA_DATADEFAULT , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCDATA , VALUE_NUMBER , VAL_PPCDATA_DEFAULT , PAGE_PPC , GD_PPCDATA , CYCLE_KIND , "-msdata" , VAL_PPCDATA_DATADEFAULT , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCDATA , VALUE_NUMBER , VAL_PPCDATA_DEFAULT , PAGE_PPC , GD_PPCDATA , CYCLE_KIND , "-msdata=eabi" , VAL_PPCDATA_DATAEABI , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCDATA , VALUE_NUMBER , VAL_PPCDATA_DEFAULT , PAGE_PPC , GD_PPCDATA , CYCLE_KIND , "-msdata=sysv" , VAL_PPCDATA_DATASYSV , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCDATA , VALUE_NUMBER , VAL_PPCDATA_DEFAULT , PAGE_PPC , GD_PPCDATA , CYCLE_KIND , "-msdata=none" , VAL_PPCDATA_DATANONE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PPCDATA , VALUE_NUMBER , VAL_PPCDATA_DEFAULT , PAGE_PPC , GD_PPCDATA , CYCLE_KIND , "-mno-sdata" , VAL_PPCDATA_DATANONE , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, // debugger page { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_DEBUGGER , GD_DEBUG , CYCLE_KIND , "-g" , VAL_DEBUG_DEBUG , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_DEBUGGER , GD_DEBUG , CYCLE_KIND , "-ggdb" , VAL_DEBUG_DEBUGGDB , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_DEBUGGER , GD_DEBUG , CYCLE_KIND , "-gstabs" , VAL_DEBUG_DEBUGSTABS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_DEBUGGER , GD_DEBUG , CYCLE_KIND , "-gstabs+" , VAL_DEBUG_DEBUGSTABSPLUS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_DEBUGGER , GD_DEBUG , CYCLE_KIND , "-gcoff" , VAL_DEBUG_DEBUGCOFF , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_DEBUGGER , GD_DEBUG , CYCLE_KIND , "-gxcoff" , VAL_DEBUG_DEBUGXCOFF , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_DEBUGGER , GD_DEBUG , CYCLE_KIND , "-gxcoff+" , VAL_DEBUG_DEBUGXCOFFPLUS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_DEBUGGER , GD_DEBUG , CYCLE_KIND , "-gdwarf" , VAL_DEBUG_DEBUGDWARF , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_DEBUGGER , GD_DEBUG , CYCLE_KIND , "-gdwarf+" , VAL_DEBUG_DEBUGDWARFPLUS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , VAL_DEBUG_NODEBUG , PAGE_DEBUGGER , GD_DEBUG , CYCLE_KIND , "-gdwarf-2" , VAL_DEBUG_DEBUGDWARF2 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PROFILE , VALUE_NUMBER , VAL_PROFILE_NOPROFILE , PAGE_DEBUGGER , GD_PROFILE , CYCLE_KIND , "-p" , VAL_PROFILE_PROFILE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PROFILE , VALUE_NUMBER , VAL_PROFILE_NOPROFILE , PAGE_DEBUGGER , GD_PROFILE , CYCLE_KIND , "-pg" , VAL_PROFILE_PROFILEGPROF , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PROFILEBLOCKS , VALUE_NUMBER , VAL_PROFILEBLOCKS_NOPROFILEBLOCKS , PAGE_DEBUGGER , GD_PROFILEBLOCKS , CYCLE_KIND , "-a" , VAL_PROFILEBLOCKS_PROFILEBLOCKS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PROFILEBLOCKS , VALUE_NUMBER , VAL_PROFILEBLOCKS_NOPROFILEBLOCKS , PAGE_DEBUGGER , GD_PROFILEBLOCKS , CYCLE_KIND , "-ax" , VAL_PROFILEBLOCKS_PROFILEBLOCKSEXTRA , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ARCS , VALUE_NUMBER , VAL_ARCS_DEFAULT , PAGE_DEBUGGER , GD_ARCS , CYCLE_KIND , "-fno-profile-arcs" , VAL_ARCS_NOARCS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ARCS , VALUE_NUMBER , VAL_ARCS_DEFAULT , PAGE_DEBUGGER , GD_ARCS , CYCLE_KIND , "-fprofile-arcs" , VAL_ARCS_ARCS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_COVERAGE , VALUE_NUMBER , VAL_COVERAGE_DEFAULT , PAGE_DEBUGGER , GD_COVERAGE , CYCLE_KIND , "-fno-test-coverage" , VAL_COVERAGE_NOCOVERAGE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_COVERAGE , VALUE_NUMBER , VAL_COVERAGE_DEFAULT , PAGE_DEBUGGER , GD_COVERAGE , CYCLE_KIND , "-ftest-coverage" , VAL_COVERAGE_SAVECOVERAGEDATA , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUGLEVEL , VALUE_NUMBER , VAL_DEBUGLEVEL_DEFAULT , PAGE_DEBUGGER , GD_DEBUGLEVEL , CYCLE_KIND , "-g1" , VAL_DEBUGLEVEL_DEBUGLEVEL1 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUGLEVEL , VALUE_NUMBER , VAL_DEBUGLEVEL_DEFAULT , PAGE_DEBUGGER , GD_DEBUGLEVEL , CYCLE_KIND , "-g2" , VAL_DEBUGLEVEL_DEBUGLEVEL2 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUGLEVEL , VALUE_NUMBER , VAL_DEBUGLEVEL_DEFAULT , PAGE_DEBUGGER , GD_DEBUGLEVEL , CYCLE_KIND , "-g3" , VAL_DEBUGLEVEL_DEBUGLEVEL3 , 0 , NULL , NULL , SYNTAX_ACTIVE }, // cplusplus page { OPTION_ACCESSCONTROL , VALUE_NUMBER , VAL_ACCESSCONTROL_DEFAULT , PAGE_CPLUSPLUS , GD_ACCESSCONTROL , CYCLE_KIND , "-faccess-control" , VAL_ACCESSCONTROL_ACCESSCONTROL , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ACCESSCONTROL , VALUE_NUMBER , VAL_ACCESSCONTROL_DEFAULT , PAGE_CPLUSPLUS , GD_ACCESSCONTROL , CYCLE_KIND , "-fno-access-control" , VAL_ACCESSCONTROL_NOACCESSCONTROL , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CHECKNEW , VALUE_NUMBER , VAL_CHECKNEW_DEFAULT , PAGE_CPLUSPLUS , GD_CHECKNEW , CYCLE_KIND , "-fno-check-new" , VAL_CHECKNEW_NOCHECKNEW , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CHECKNEW , VALUE_NUMBER , VAL_CHECKNEW_DEFAULT , PAGE_CPLUSPLUS , GD_CHECKNEW , CYCLE_KIND , "-fcheck-new" , VAL_CHECKNEW_CHECKNEW , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ACCEPTDOLLAR , VALUE_NUMBER , VAL_ACCEPTDOLLAR_DEFAULT , PAGE_CPLUSPLUS , GD_ACCEPTDOLLAR , CYCLE_KIND , "-fdollars-in-identifiers" , VAL_ACCEPTDOLLAR_ACCEPTDOLLAR , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ACCEPTDOLLAR , VALUE_NUMBER , VAL_ACCEPTDOLLAR_DEFAULT , PAGE_CPLUSPLUS , GD_ACCEPTDOLLAR , CYCLE_KIND , "-fno-dollars-in-identifiers" , VAL_ACCEPTDOLLAR_NOACCEPTDOLLAR , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FORSCOPE , VALUE_NUMBER , VAL_FORSCOPE_DEFAULT , PAGE_CPLUSPLUS , GD_FORSCOPE , CYCLE_KIND , "-ffor-scope" , VAL_FORSCOPE_FORLOOPSCOPE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FORSCOPE , VALUE_NUMBER , VAL_FORSCOPE_DEFAULT , PAGE_CPLUSPLUS , GD_FORSCOPE , CYCLE_KIND , "-fno-for-scope" , VAL_FORSCOPE_NOFORLOOPSCOPE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_GNUKEYWORDS , VALUE_NUMBER , VAL_GNUKEYWORDS_DEFAULT , PAGE_CPLUSPLUS , GD_GNUKEYWORDS , CYCLE_KIND , "-fgnu-keywords" , VAL_GNUKEYWORDS_GNUKEYWORDS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_GNUKEYWORDS , VALUE_NUMBER , VAL_GNUKEYWORDS_DEFAULT , PAGE_CPLUSPLUS , GD_GNUKEYWORDS , CYCLE_KIND , "-fno-gnu-keywords" , VAL_GNUKEYWORDS_NOGNUKEYWORDS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SIGNATURES , VALUE_NUMBER , VAL_SIGNATURES_DEFAULT , PAGE_CPLUSPLUS , GD_SIGNATURES , CYCLE_KIND , "-fno-handle-signatures" , VAL_SIGNATURES_NOSIGNATURES , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SIGNATURES , VALUE_NUMBER , VAL_SIGNATURES_DEFAULT , PAGE_CPLUSPLUS , GD_SIGNATURES , CYCLE_KIND , "-fhandle-signatures" , VAL_SIGNATURES_HANDLESIGNATURES , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STDNAMESPACE , VALUE_NUMBER , VAL_STDNAMESPACE_DEFAULT , PAGE_CPLUSPLUS , GD_STDNAMESPACE , CYCLE_KIND , "-fno-honor-std" , VAL_STDNAMESPACE_IGNORESTDNAMESPACE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STDNAMESPACE , VALUE_NUMBER , VAL_STDNAMESPACE_DEFAULT , PAGE_CPLUSPLUS , GD_STDNAMESPACE , CYCLE_KIND , "-fhonor-std" , VAL_STDNAMESPACE_NOIGNORESTDNAMESPACE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MANGLING , VALUE_NUMBER , VAL_MANGLING_DEFAULT , PAGE_CPLUSPLUS , GD_MANGLING , CYCLE_KIND , "-fname-mangling-version-1" , VAL_MANGLING_NEW , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MANGLING , VALUE_NUMBER , VAL_MANGLING_DEFAULT , PAGE_CPLUSPLUS , GD_MANGLING , CYCLE_KIND , "-fname-mangling-version-0" , VAL_MANGLING_OLD , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPERATORNAMES , VALUE_NUMBER , VAL_OPERATORNAMES_DEFAULT , PAGE_CPLUSPLUS , GD_OPERATORNAMES , CYCLE_KIND , "-fno-operator-names" , VAL_OPERATORNAMES_NOOPERATORNAMES , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPERATORNAMES , VALUE_NUMBER , VAL_OPERATORNAMES_DEFAULT , PAGE_CPLUSPLUS , GD_OPERATORNAMES , CYCLE_KIND , "-foperator-names" , VAL_OPERATORNAMES_OPERATORNAMES , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_RTTI , VALUE_NUMBER , VAL_RTTI_DEFAULT , PAGE_CPLUSPLUS , GD_RTTI , CYCLE_KIND , "-frtti" , VAL_RTTI_RTTI , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_RTTI , VALUE_NUMBER , VAL_RTTI_DEFAULT , PAGE_CPLUSPLUS , GD_RTTI , CYCLE_KIND , "-fno-rtti" , VAL_RTTI_NORTTI , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STRICTPROTOS , VALUE_NUMBER , VAL_STRICTPROTOS_DEFAULT , PAGE_CPLUSPLUS , GD_STRICTPROTOS , CYCLE_KIND , "-fno-strict-prototype" , VAL_STRICTPROTOS_NOSTRICTPROTOS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STRICTPROTOS , VALUE_NUMBER , VAL_STRICTPROTOS_DEFAULT , PAGE_CPLUSPLUS , GD_STRICTPROTOS , CYCLE_KIND , "-fstrict-prototype" , VAL_STRICTPROTOS_STRICTPROTOS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LONGMANGLING , VALUE_NUMBER , VAL_LONGMANGLING_DEFAULT , PAGE_CPLUSPLUS , GD_LONGMANGLING , CYCLE_KIND , "-fno-squangle" , VAL_LONGMANGLING_LONGNAMEMANGLING , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LONGMANGLING , VALUE_NUMBER , VAL_LONGMANGLING_DEFAULT , PAGE_CPLUSPLUS , GD_LONGMANGLING , CYCLE_KIND , "-fsquangle" , VAL_LONGMANGLING_COMPRESSEDMANGLING , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ASSIGNTOTHIS , VALUE_NUMBER , VAL_ASSIGNTOTHIS_DEFAULT , PAGE_CPLUSPLUS , GD_ASSIGNTOTHIS , CYCLE_KIND , "-fno-this-is-variable" , VAL_ASSIGNTOTHIS_NOASSIGNTOTHIS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ASSIGNTOTHIS , VALUE_NUMBER , VAL_ASSIGNTOTHIS_DEFAULT , PAGE_CPLUSPLUS , GD_ASSIGNTOTHIS , CYCLE_KIND , "-fthis-is-variable" , VAL_ASSIGNTOTHIS_ASSIGNTOTHIS , 0 , NULL , NULL , SYNTAX_ACTIVE }, // inline page { OPTION_INLINECLASS , VALUE_NUMBER , VAL_INLINECLASS_DEFAULT , PAGE_INLINE , GD_INLINECLASS , CYCLE_KIND , "-fdefault-inline" , VAL_INLINECLASS_INLINECLASSFUNC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_INLINECLASS , VALUE_NUMBER , VAL_INLINECLASS_DEFAULT , PAGE_INLINE , GD_INLINECLASS , CYCLE_KIND , "-fno-default-inline" , VAL_INLINECLASS_NOINLINECLASSFUNC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_INLINEDIRECTIVE , VALUE_NUMBER , VAL_INLINECLASS_DEFAULT , PAGE_INLINE , GD_INLINEDIRECTIVE , CYCLE_KIND , "-finline" , VAL_INLINEDIRECTIVE_INLINEDIRECTIVE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_INLINEDIRECTIVE , VALUE_NUMBER , VAL_INLINECLASS_DEFAULT , PAGE_INLINE , GD_INLINEDIRECTIVE , CYCLE_KIND , "-fno-inline" , VAL_INLINEDIRECTIVE_IGNOREINLINEDIRECTIVE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DELETEINLINED , VALUE_NUMBER , VAL_DELETEINLINED_DEFAULT , PAGE_INLINE , GD_DELETEINLINED , CYCLE_KIND , "-fno-keep-inline-functions" , VAL_DELETEINLINED_DELETEINLINEDFUNC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DELETEINLINED , VALUE_NUMBER , VAL_DELETEINLINED_DEFAULT , PAGE_INLINE , GD_DELETEINLINED , CYCLE_KIND , "-fkeep-inline-functions" , VAL_DELETEINLINED_KEEPINLINEDFUNC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTOINLINE , VALUE_NUMBER , VAL_AUTOINLINE_DEFAULT , PAGE_INLINE , GD_AUTOINLINE , CYCLE_KIND , "-fno-inline-functions" , VAL_AUTOINLINE_NOAUTOMATICINLINE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AUTOINLINE , VALUE_NUMBER , VAL_AUTOINLINE_DEFAULT , PAGE_INLINE , GD_AUTOINLINE , CYCLE_KIND , "-finline-functions" , VAL_AUTOINLINE_INLINESMALLFUNCTIONS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_INLINELIMIT , VALUE_NUMERIC , 0 , PAGE_INLINE , GD_INLINELIMIT , STRING_KIND , "-finline-limit-*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, // details page { OPTION_STRENGTHREDUCE , VALUE_NUMBER , VAL_STRENGTHREDUCE_DEFAULT , PAGE_DETAILS , GD_STRENGTHREDUCE , CYCLE_KIND , "-fno-strength-reduce" , VAL_STRENGTHREDUCE_NOSTRENGTHREDUCE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STRENGTHREDUCE , VALUE_NUMBER , VAL_STRENGTHREDUCE_DEFAULT , PAGE_DETAILS , GD_STRENGTHREDUCE , CYCLE_KIND , "-fstrength-reduce" , VAL_STRENGTHREDUCE_STRENGTHREDUCE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_THREADJUMPS , VALUE_NUMBER , VAL_THREADJUMPS_DEFAULT , PAGE_DETAILS , GD_THREADJUMPS , CYCLE_KIND , "-fno-thread-jumps" , VAL_THREADJUMPS_NOTHREADJUMPS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_THREADJUMPS , VALUE_NUMBER , VAL_THREADJUMPS_DEFAULT , PAGE_DETAILS , GD_THREADJUMPS , CYCLE_KIND , "-fthread-jumps" , VAL_THREADJUMPS_THREADJUMPS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CSEFOLLOWJUMPS , VALUE_NUMBER , VAL_CSEFOLLOWJUMPS_DEFAULT , PAGE_DETAILS , GD_CSEFOLLOWJUMPS , CYCLE_KIND , "-fno-cse-follow-jumps" , VAL_CSEFOLLOWJUMPS_NOCSEFOLLOWJUMPS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CSEFOLLOWJUMPS , VALUE_NUMBER , VAL_CSEFOLLOWJUMPS_DEFAULT , PAGE_DETAILS , GD_CSEFOLLOWJUMPS , CYCLE_KIND , "-fcse-follow-jumps" , VAL_CSEFOLLOWJUMPS_CSEFOLLOWJUMPS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CSESKIPBLOCKS , VALUE_NUMBER , VAL_CSESKIPBLOCKS_DEFAULT , PAGE_DETAILS , GD_CSESKIPBLOCKS , CYCLE_KIND , "-fno-cse-skip-blocks" , VAL_CSESKIPBLOCKS_NOCSESKIPBLOCKS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CSESKIPBLOCKS , VALUE_NUMBER , VAL_CSESKIPBLOCKS_DEFAULT , PAGE_DETAILS , GD_CSESKIPBLOCKS , CYCLE_KIND , "-fcse-skip-blocks" , VAL_CSESKIPBLOCKS_CSESKIPBLOCKS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FUNCTIONCSE , VALUE_NUMBER , VAL_FUNCTIONCSE_DEFAULT , PAGE_DETAILS , GD_FUNCTIONCSE , CYCLE_KIND , "-ffunction-cse" , VAL_FUNCTIONCSE_FUNCTIONCSE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FUNCTIONCSE , VALUE_NUMBER , VAL_FUNCTIONCSE_DEFAULT , PAGE_DETAILS , GD_FUNCTIONCSE , CYCLE_KIND , "-fno-function-cse" , VAL_FUNCTIONCSE_NOFUNCTIONCSE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_RERUNCSE , VALUE_NUMBER , VAL_RERUNCSE_DEFAULT , PAGE_DETAILS , GD_RERUNCSE , CYCLE_KIND , "-fno-rerun-cse-after-loop" , VAL_RERUNCSE_NORERUNCSE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_RERUNCSE , VALUE_NUMBER , VAL_RERUNCSE_DEFAULT , PAGE_DETAILS , GD_RERUNCSE , CYCLE_KIND , "-frerun-cse-after-loop" , VAL_RERUNCSE_RERUNCSE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_RERUNLOOPOPT , VALUE_NUMBER , VAL_RERUNLOOPOPT_DEFAULT , PAGE_DETAILS , GD_RERUNLOOPOPT , CYCLE_KIND , "-fno-rerun-loop-opt" , VAL_RERUNLOOPOPT_NORERUNLOOPOPT , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_RERUNLOOPOPT , VALUE_NUMBER , VAL_RERUNLOOPOPT_DEFAULT , PAGE_DETAILS , GD_RERUNLOOPOPT , CYCLE_KIND , "-frerun-loop-opt" , VAL_RERUNLOOPOPT_RERUNLOOPOPTIMIZER , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_GLOBALCSEPASS , VALUE_NUMBER , VAL_GLOBALCSEPASS_DEFAULT , PAGE_DETAILS , GD_GLOBALCSEPASS , CYCLE_KIND , "-fno-gcse" , VAL_GLOBALCSEPASS_NOGLOBALCSEPASS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_GLOBALCSEPASS , VALUE_NUMBER , VAL_GLOBALCSEPASS_DEFAULT , PAGE_DETAILS , GD_GLOBALCSEPASS , CYCLE_KIND , "-fgcse" , VAL_GLOBALCSEPASS_GLOBALCSEPASS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZEMOVE , VALUE_NUMBER , VAL_OPTIMIZEMOVE_DEFAULT , PAGE_DETAILS , GD_OPTIMIZEMOVE , CYCLE_KIND , "-fno-regmove" , VAL_OPTIMIZEMOVE_NOOPTIMIZEMOVE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZEMOVE , VALUE_NUMBER , VAL_OPTIMIZEMOVE_DEFAULT , PAGE_DETAILS , GD_OPTIMIZEMOVE , CYCLE_KIND , "-fregmove" , VAL_OPTIMIZEMOVE_OPTIMIZEMOVE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DELAYEDBRANCH , VALUE_NUMBER , VAL_DELAYEDBRANCH_DEFAULT , PAGE_DETAILS , GD_DELAYEDBRANCH , CYCLE_KIND , "-fno-delayed-branch" , VAL_DELAYEDBRANCH_NODELAYEDBRANCH , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DELAYEDBRANCH , VALUE_NUMBER , VAL_DELAYEDBRANCH_DEFAULT , PAGE_DETAILS , GD_DELAYEDBRANCH , CYCLE_KIND , "-fdelayed-branch" , VAL_DELAYEDBRANCH_DELAYEDBRANCH , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SEPARATEFUNCS , VALUE_NUMBER , VAL_SEPARATEFUNCS_DEFAULT , PAGE_DETAILS , GD_SEPARATEFUNCS , CYCLE_KIND , "-fno-function-sections" , VAL_SEPARATEFUNCS_NOSEPARATESECTIONS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SEPARATEFUNCS , VALUE_NUMBER , VAL_SEPARATEFUNCS_DEFAULT , PAGE_DETAILS , GD_SEPARATEFUNCS , CYCLE_KIND , "-ffunction-sections" , VAL_SEPARATEFUNCS_SEPARATESECTIONS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SEPARATEDATA , VALUE_NUMBER , VAL_SEPARATEDATA_DEFAULT , PAGE_DETAILS , GD_SEPARATEDATA , CYCLE_KIND , "-fno-data-sections" , VAL_SEPARATEDATA_NOSEPARATESECTIONS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SEPARATEDATA , VALUE_NUMBER , VAL_SEPARATEDATA_DEFAULT , PAGE_DETAILS , GD_SEPARATEDATA , CYCLE_KIND , "-fdata-sections" , VAL_SEPARATEDATA_SEPARATESECTIONS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_UNROLLLOOPS , VALUE_NUMBER , VAL_UNROLLLOOPS_DEFAULT , PAGE_DETAILS , GD_UNROLLLOOPS , CYCLE_KIND , "-fno-unroll-loops" , VAL_UNROLLLOOPS_NOUNROLLLOOPS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_UNROLLLOOPS , VALUE_NUMBER , VAL_UNROLLLOOPS_DEFAULT , PAGE_DETAILS , GD_UNROLLLOOPS , CYCLE_KIND , "-funroll-loops" , VAL_UNROLLLOOPS_UNROLLLOOPS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_UNROLLALLLOOPS , VALUE_NUMBER , VAL_UNROLLALLLOOPS_DEFAULT , PAGE_DETAILS , GD_UNROLLALLLOOPS , CYCLE_KIND , "-fno-unroll-all-loops" , VAL_UNROLLALLLOOPS_NOUNROLLALLLOOPS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_UNROLLALLLOOPS , VALUE_NUMBER , VAL_UNROLLALLLOOPS_DEFAULT , PAGE_DETAILS , GD_UNROLLALLLOOPS , CYCLE_KIND , "-funroll-all-loops" , VAL_UNROLLALLLOOPS_UNROLLALLLOOPS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MOVEMOVEABLE , VALUE_NUMBER , VAL_MOVEMOVEABLE_DEFAULT , PAGE_DETAILS , GD_MOVEMOVEABLE , CYCLE_KIND , "-fno-move-all-movables" , VAL_MOVEMOVEABLE_NOMOVEMOVEABLE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MOVEMOVEABLE , VALUE_NUMBER , VAL_MOVEMOVEABLE_DEFAULT , PAGE_DETAILS , GD_MOVEMOVEABLE , CYCLE_KIND , "-fmove-all-movables" , VAL_MOVEMOVEABLE_MOVEMOVEABLE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_REDUCEALLVARS , VALUE_NUMBER , VAL_REDUCEALLVARS_DEFAULT , PAGE_DETAILS , GD_REDUCEALLVARS , CYCLE_KIND , "-fno-reduce-all-givs" , VAL_REDUCEALLVARS_NOREDUCEALLVARS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_REDUCEALLVARS , VALUE_NUMBER , VAL_REDUCEALLVARS_DEFAULT , PAGE_DETAILS , GD_REDUCEALLVARS , CYCLE_KIND , "-freduce-all-givs" , VAL_REDUCEALLVARS_REDUCEALLVARS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_BRANCHPROBABILITY , VALUE_NUMBER , VAL_BRANCHPROBABILITY_DEFAULT , PAGE_DETAILS , GD_BRANCHPROBABILITY , CYCLE_KIND , "-fno-branch-probabilities" , VAL_BRANCHPROBABILITY_NOBRANCHPROBAB , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_BRANCHPROBABILITY , VALUE_NUMBER , VAL_BRANCHPROBABILITY_DEFAULT , PAGE_DETAILS , GD_BRANCHPROBABILITY , CYCLE_KIND , "-fbranch-probabilities" , VAL_BRANCHPROBABILITY_BRANCHPROBABILITIES , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_KEEPCONST , VALUE_NUMBER , VAL_KEEPCONST_DEFAULT , PAGE_DETAILS , GD_KEEPCONST , CYCLE_KIND , "-fno-keep-static-consts" , VAL_KEEPCONST_KEEPUNUSEDCONST , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_KEEPCONST , VALUE_NUMBER , VAL_KEEPCONST_DEFAULT , PAGE_DETAILS , GD_KEEPCONST , CYCLE_KIND , "-fkeep-static-consts" , VAL_KEEPCONST_DELETEUNUSEDCONST , 0 , NULL , NULL , SYNTAX_ACTIVE }, // preprocessor page { OPTION_STRIPCOMMENTS , VALUE_NUMBER , VAL_STRIPCOMMENTS_STRIPCOMMENTS , PAGE_PREPROCESSOR, GD_STRIPCOMMENTS , CYCLE_KIND , "-C" , VAL_STRIPCOMMENTS_NOSTRIPCOMMENTS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEFINEMACROS , VALUE_NUMBER , VAL_DEFINEMACROS_DEFINEMACROS , PAGE_PREPROCESSOR, GD_DEFINEMACROS , CYCLE_KIND , "-undef" , VAL_DEFINEMACROS_NODEFINEMACROS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LINENUMBERS , VALUE_NUMBER , VAL_LINENUMBERS_GENLINENUMBERS , PAGE_PREPROCESSOR, GD_LINENUMBERS , CYCLE_KIND , "-P" , VAL_LINENUMBERS_NOGENLINENUMBERS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEFINES , VALUE_LIST , 0 , PAGE_PREPROCESSOR, GD_DEFINES , LISTVIEW_KIND , "-D*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_UNDEFINES , VALUE_LIST , 0 , PAGE_PREPROCESSOR, GD_UNDEFINES , LISTVIEW_KIND , "-U*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_TRADITIONALCPP , VALUE_NUMBER , VAL_TRADITIONALCPP_NOTRADITIONALCPP , PAGE_PREPROCESSOR, GD_TRADITIONALCPP , CYCLE_KIND , "-traditional-cpp" , VAL_TRADITIONALCPP_TRADIONALCPP , 0 , NULL , NULL , SYNTAX_ACTIVE }, // m68k page { OPTION_M68KFPU , VALUE_NUMBER , VAL_M68KFPU_NOFPU , PAGE_M68K , GD_M68KFPU , CYCLE_KIND , "-m68881" , VAL_M68KFPU_FPU68881 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-m68000" , VAL_CPU_CPU68000 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-m68020" , VAL_CPU_CPU68020 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-m68030" , VAL_CPU_CPU68030 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-m68040" , VAL_CPU_CPU68040 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-m68060" , VAL_CPU_CPU68060 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-m68020-40" , VAL_CPU_CPU6802068040 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-m68020-60" , VAL_CPU_CPU6802068060 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-mcpu=powerpc" , VAL_CPU_POWERPC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-mcpu=601" , VAL_CPU_601 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-mcpu=602" , VAL_CPU_602 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-mcpu=603" , VAL_CPU_603 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-mcpu=603e" , VAL_CPU_603E , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-mcpu=604" , VAL_CPU_604 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-mcpu=604e" , VAL_CPU_604E , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-mcpu=620" , VAL_CPU_620 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-mcpu=740" , VAL_CPU_740 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , VAL_CPU_DEFAULT , PAGE_M68K , GD_CPU , CYCLE_KIND , "-mcpu=750" , VAL_CPU_750 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KSOFTFLOAT , VALUE_NUMBER , VAL_M68KSOFTFLOAT_NOSOFTFLOAT , PAGE_M68K , GD_M68KSOFTFLOAT , CYCLE_KIND , "-msoft-float" , VAL_M68KSOFTFLOAT_SOFTFLOAT , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KLONGINT , VALUE_NUMBER , VAL_M68KLONGINT_INT32BIT , PAGE_M68K , GD_M68KLONGINT , CYCLE_KIND , "-mshort" , VAL_M68KLONGINT_INT16BIT , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KRTS , VALUE_NUMBER , VAL_M68KRTS_RETURNWITHRTS , PAGE_M68K , GD_M68KRTS , CYCLE_KIND , "-mrtd" , VAL_M68KRTS_RETURNWITHRTD , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KALIGN , VALUE_NUMBER , VAL_M68KALIGN_DEFAULT , PAGE_M68K , GD_M68KALIGN , CYCLE_KIND , "-mno-align-int" , VAL_M68KALIGN_NO32BITALIGN , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KALIGN , VALUE_NUMBER , VAL_M68KALIGN_DEFAULT , PAGE_M68K , GD_M68KALIGN , CYCLE_KIND , "-malign-int" , VAL_M68KALIGN_32BITALIGN , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KFARCODE , VALUE_NUMBER , VAL_M68KFARCODE_CODEFAR , PAGE_M68K , GD_M68KFARCODE , CYCLE_KIND , "-msmall-code" , VAL_M68KFARCODE_CODENEAR , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KFARDATA , VALUE_NUMBER , VAL_M68KFARDATA_DATADEFAULT , PAGE_M68K , GD_M68KFARDATA , CYCLE_KIND , "-fno-baserel" , VAL_M68KFARDATA_DATAFAR , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KFARDATA , VALUE_NUMBER , VAL_M68KFARDATA_DATADEFAULT , PAGE_M68K , GD_M68KFARDATA , CYCLE_KIND , "-fbaserel" , VAL_M68KFARDATA_DATANEAR16 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KFARDATA , VALUE_NUMBER , VAL_M68KFARDATA_DATADEFAULT , PAGE_M68K , GD_M68KFARDATA , CYCLE_KIND , "-fbaserel32" , VAL_M68KFARDATA_DATANEAR32 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KFARDATA , VALUE_NUMBER , VAL_M68KFARDATA_DATADEFAULT , PAGE_M68K , GD_M68KFARDATA , CYCLE_KIND , "-resident" , VAL_M68KFARDATA_DATARESIDENT16 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KFARDATA , VALUE_NUMBER , VAL_M68KFARDATA_DATADEFAULT , PAGE_M68K , GD_M68KFARDATA , CYCLE_KIND , "-resident32" , VAL_M68KFARDATA_DATARESIDENT32 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KSTACKCHECK , VALUE_NUMBER , VAL_M68KSTACKCHECK_DEFAULT , PAGE_M68K , GD_M68KSTACKCHECK , CYCLE_KIND , "-mno-stackcheck" , VAL_M68KSTACKCHECK_NOSTACKCHECK , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KSTACKCHECK , VALUE_NUMBER , VAL_M68KSTACKCHECK_DEFAULT , PAGE_M68K , GD_M68KSTACKCHECK , CYCLE_KIND , "-mstackcheck" , VAL_M68KSTACKCHECK_STACKCHECK , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KSTACKEXTEND , VALUE_NUMBER , VAL_M68KSTACKEXTEND_DEFAULT , PAGE_M68K , GD_M68KSTACKEXTEND , CYCLE_KIND , "-mno-stackextend" , VAL_M68KSTACKEXTEND_NOSTACKEXTEND , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KSTACKEXTEND , VALUE_NUMBER , VAL_M68KSTACKEXTEND_DEFAULT , PAGE_M68K , GD_M68KSTACKEXTEND , CYCLE_KIND , "-mstackextend" , VAL_M68KSTACKEXTEND_STACKEXTEND , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KRELOADA4 , VALUE_NUMBER , VAL_M68KRELOADA4_DEFAULT , PAGE_M68K , GD_M68KRELOADA4 , CYCLE_KIND , "-mno-restore-a4" , VAL_M68KRELOADA4_NORELOADA4 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KRELOADA4 , VALUE_NUMBER , VAL_M68KRELOADA4_DEFAULT , PAGE_M68K , GD_M68KRELOADA4 , CYCLE_KIND , "-mrestore-a4" , VAL_M68KRELOADA4_RELOADA4 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KRELOADA4 , VALUE_NUMBER , VAL_M68KRELOADA4_DEFAULT , PAGE_M68K , GD_M68KRELOADA4 , CYCLE_KIND , "-malways-restore-a4" , VAL_M68KRELOADA4_ALWAYSRELOADA4 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KPARMS , VALUE_NUMBER , VAL_M68KPARMS_PARMSSTACK , PAGE_M68K , GD_M68KPARMS , CYCLE_KIND , "-mregparm" , VAL_M68KPARMS_PARMSREGISTERS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KPARMS , VALUE_NUMBER , VAL_M68KPARMS_PARMSSTACK , PAGE_M68K , GD_M68KPARMS , CYCLE_KIND , "-mregparm=1" , VAL_M68KPARMS_PARMSREGISTERS1 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KPARMS , VALUE_NUMBER , VAL_M68KPARMS_PARMSSTACK , PAGE_M68K , GD_M68KPARMS , CYCLE_KIND , "-mregparm=2" , VAL_M68KPARMS_PARMSREGISTERS2 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KPARMS , VALUE_NUMBER , VAL_M68KPARMS_PARMSSTACK , PAGE_M68K , GD_M68KPARMS , CYCLE_KIND , "-mregparm=3" , VAL_M68KPARMS_PARMSREGISTERS3 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_M68KPARMS , VALUE_NUMBER , VAL_M68KPARMS_PARMSSTACK , PAGE_M68K , GD_M68KPARMS , CYCLE_KIND , "-mregparm=4" , VAL_M68KPARMS_PARMSREGISTERS4 , 0 , NULL , NULL , SYNTAX_ACTIVE }, // OPTION_OPTIONS is last entry to catch unknown options ("*" template) { OPTION_OPTIONS , VALUE_LIST , 0 , PAGE_SPECIAL , GD_OPTIONS , LISTVIEW_KIND , "*" , UNDEFINED , 0 , NULL, NULL, SYNTAX_ACTIVE }, OPTIONS_MAXIMUM }; /* ---------------------------------- PageLayout ------------------------------- Layouts of dialog pages, in order of PAGE_ID (!) */ struct PageLayout Layouts[PAGE_MAXIMUM] = { // gadgets count gadget tags gadget types gadget data textual labels { INDEX_CNT , INDEXGTags , INDEXGTypes , INDEXNGad , NULL }, { COMPILER_CNT , COMPILERGTags , COMPILERGTypes , COMPILERNGad , NULL }, { MESSAGES_CNT , MESSAGESGTags , MESSAGESGTypes , MESSAGESNGad , NULL }, { LANGUAGE_CNT , LANGUAGEGTags , LANGUAGEGTypes , LANGUAGENGad , LANGUAGEIText }, { OPTIMIZER_CNT , OPTIMIZERGTags , OPTIMIZERGTypes , OPTIMIZERNGad , OPTIMIZERIText }, { LINKER_CNT , LINKERGTags , LINKERGTypes , LINKERNGad , NULL }, { SPECIAL_CNT , SPECIALGTags , SPECIALGTypes , SPECIALNGad , NULL }, { PPC_CNT , PPCGTags , PPCGTypes , PPCNGad , PPCIText }, { DEBUGGER_CNT , DEBUGGERGTags , DEBUGGERGTypes , DEBUGGERNGad , DEBUGGERIText }, { CPLUSPLUS_CNT , CPLUSPLUSGTags , CPLUSPLUSGTypes , CPLUSPLUSNGad , CPLUSPLUSIText }, { INLINE_CNT , INLINEGTags , INLINEGTypes , INLINENGad , NULL }, { DETAILS_CNT , DETAILSGTags , DETAILSGTypes , DETAILSNGad , DETAILSIText }, { PREPROCESSOR_CNT, PREPROCESSORGTags, PREPROCESSORGTypes, PREPROCESSORNGad, NULL }, { M68K_CNT , M68KGTags , M68KGTypes , M68KNGad , M68KIText }, }; /* -------------------------------- Suggestions -------------------------------- Possible values for some (list-style-)options */ UBYTE *SuggestionsForWarnings[] = { "aggregate-return", "bad-function-cast", "cast-align", "cast-qual", "char-subscripts", "comment", "conversion", "error-implicit-function-declaration", "format", "id-clash-LEN", "implicit", "implicit-function", "implicit-function-declaration", "implicit-int", "import", "inline", "larger-than-LEN", "long-long", "main", "missing-declarations", "missing-noreturn", "missing-prototypes", "multichar", "nested-externs", "parentheses", "pointer-arith", "redundant-decls", "return-type", "shadow", "sign-compare", "strict-prototypes", "switch", "traditional", "trigraphs", "undef", "uninitialized", "unknown-pragmas", "unused", "write-strings", NULL }; #endif /// /// "globals (vbcc)" #ifdef TARGET_VBCC /* ------------------------------- Connectivity -------------------------------- The connectivity table describes how gadgets interact */ struct Connectivity Connectivity[] = { // DIALOG PAGE GADGET (SOURCE) GADGET (TARGET) ACTION { PAGE_INDEX, GD_ASKCONFIG, GD_VCCCONFIG, ACTION_REQFILENAME }, { PAGE_COMPILER, GD_INCLUDES, GD_INCLUDES, ACTION_REFRESH }, { PAGE_COMPILER, GD_ADDINCLUDE, GD_INCLUDES, ACTION_REQFOLDER }, { PAGE_COMPILER, GD_DELINCLUDE, GD_INCLUDES, ACTION_DEL }, { PAGE_COMPILER, GD_EDITINCLUDE, GD_INCLUDES, ACTION_EDIT }, { PAGE_COMPILER, GD_DEFINES, GD_DEFINES, ACTION_REFRESH }, { PAGE_COMPILER, GD_ADDDEFINE, GD_DEFINES, ACTION_ADD }, { PAGE_COMPILER, GD_DELDEFINE, GD_DEFINES, ACTION_DEL }, { PAGE_COMPILER, GD_EDITDEFINE, GD_DEFINES, ACTION_EDIT }, { PAGE_MESSAGES, GD_ENABLED, GD_ENABLED, ACTION_REFRESH }, { PAGE_MESSAGES, GD_ADDENABLED, GD_ENABLED, ACTION_ADD }, { PAGE_MESSAGES, GD_DELENABLED, GD_ENABLED, ACTION_DEL }, { PAGE_MESSAGES, GD_EDITENABLED, GD_ENABLED, ACTION_EDIT }, { PAGE_MESSAGES, GD_DISABLED, GD_DISABLED, ACTION_REFRESH }, { PAGE_MESSAGES, GD_ADDDISABLED, GD_DISABLED, ACTION_ADD }, { PAGE_MESSAGES, GD_DELDISABLED, GD_DISABLED, ACTION_DEL }, { PAGE_MESSAGES, GD_EDITDISABLED, GD_DISABLED, ACTION_EDIT }, { PAGE_LINKER, GD_OBJECTS, GD_OBJECTS, ACTION_REFRESH }, { PAGE_LINKER, GD_ADDOBJECT, GD_OBJECTS, ACTION_REQFILE }, { PAGE_LINKER, GD_DELOBJECT, GD_OBJECTS, ACTION_DEL }, { PAGE_LINKER, GD_EDITOBJECT, GD_OBJECTS, ACTION_EDIT }, { PAGE_LINKER, GD_LIBPATHS, GD_LIBPATHS, ACTION_REFRESH }, { PAGE_LINKER, GD_ADDLIBPATH, GD_LIBPATHS, ACTION_REQFOLDER }, { PAGE_LINKER, GD_DELLIBPATH, GD_LIBPATHS, ACTION_DEL }, { PAGE_LINKER, GD_EDITLIBPATH, GD_LIBPATHS, ACTION_EDIT }, { PAGE_SPECIAL, GD_OPTIONS, GD_OPTIONS, ACTION_REFRESH }, { PAGE_SPECIAL, GD_ADDOPTION, GD_OPTIONS, ACTION_ADD }, { PAGE_SPECIAL, GD_DELOPTION, GD_OPTIONS, ACTION_DEL }, { PAGE_SPECIAL, GD_EDITOPTION, GD_OPTIONS, ACTION_EDIT }, PAGE_MAXIMUM }; /* ------------------------------------ Syntax --------------------------------- Global syntax table with "rules". This table describes all options, their default values, associated gadgets etc. Order in this table is important if entries have similar templates. For example, "-dontwarn=-1" is listed before "-dontwarn=*" because it is a specal case of "-dontwarn=*" (and as such has higher precedence). Options which are displayed on multiple pages have a RULE_DONOTSAVE flag set in their secondary entry (and an empty template) because the secondary entry will only be used to sync with the GUI, not for parsing configuration files. */ struct Syntax Syntax[] = { // OPTION IDENTIFIER OPTION TYPE DEFAULT VALUE DIALOG PAGE GADGET ID GADGET TYPE TEMPLATE (or NULL) VALUE ASSOCIATED WITH TEMPLATE FLAGS ACTIVATOR DEACTIVATOR STATUS // index page { OPTION_VCCONFIG , VALUE_STRING , 0 , PAGE_INDEX , GD_VCCCONFIG , STRING_KIND , "+*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_COPYRIGHT , VALUE_NUMBER , OPTION_COPYRIGHT_COPYRIGHT , PAGE_INDEX , GD_COPYRIGHT , CYCLE_KIND , "-quiet" , OPTION_COPYRIGHT_NOCOPYRIGHT , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_VERBOSE , VALUE_NUMBER , OPTION_VERBOSE_NOVERBOSE , PAGE_INDEX , GD_VERBOSE , CYCLE_KIND , "-vv" , OPTION_VERBOSE_VERYVERBOSE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_VERBOSE , VALUE_NUMBER , OPTION_VERBOSE_NOVERBOSE , PAGE_INDEX , GD_VERBOSE , CYCLE_KIND , "-v" , OPTION_VERBOSE_VERBOSE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LINK , VALUE_NUMBER , OPTION_LINK_LINK , PAGE_INDEX , GD_LINK , CYCLE_KIND , NULL , UNDEFINED , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , OPTION_OPTIMIZE_NOOPTIMIZE , PAGE_INDEX , GD_OPTIMIZE , CYCLE_KIND , NULL , UNDEFINED , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, // code page { OPTION_CONST , VALUE_NUMBER , OPTION_CONST_CONSTDATACODE , PAGE_CODE , GD_CONST , CYCLE_KIND , "-const-in-data" , OPTION_CONST_CONSTDATADATA , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , OPTION_CPU_ANY , PAGE_CODE , GD_CPU , CYCLE_KIND , "-cpu=68000" , OPTION_CPU_ANY , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , OPTION_CPU_ANY , PAGE_CODE , GD_CPU , CYCLE_KIND , "-cpu=68010" , OPTION_CPU_68010 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , OPTION_CPU_ANY , PAGE_CODE , GD_CPU , CYCLE_KIND , "-cpu=68020" , OPTION_CPU_68020 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , OPTION_CPU_ANY , PAGE_CODE , GD_CPU , CYCLE_KIND , "-cpu=68030" , OPTION_CPU_68030 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , OPTION_CPU_ANY , PAGE_CODE , GD_CPU , CYCLE_KIND , "-cpu=68040" , OPTION_CPU_68040 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPU , VALUE_NUMBER , OPTION_CPU_ANY , PAGE_CODE , GD_CPU , CYCLE_KIND , "-cpu=68060" , OPTION_CPU_68060 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DOUBLEPUSH , VALUE_NUMBER , OPTION_DOUBLEPUSH_NODOUBLEPUSH , PAGE_CODE , GD_DOUBLEPUSH , CYCLE_KIND , "-double-push" , OPTION_DOUBLEPUSH_DOUBLEPUSH , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-lmieee" , OPTION_MATH_IEEE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-lm040" , OPTION_MATH_68040 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-lm881" , OPTION_MATH_68881 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-fpu=68000" , OPTION_MATH_IEEE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-fpu=68010" , OPTION_MATH_68881 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-fpu=68020" , OPTION_MATH_68881 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-fpu=68030" , OPTION_MATH_68881 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-fpu=68040" , OPTION_MATH_68040 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-fpu=68060" , OPTION_MATH_68040 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-fpu=68881" , OPTION_MATH_68881 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MATH , VALUE_NUMBER , OPTION_MATH_NOMATH , PAGE_CODE , GD_MATH , CYCLE_KIND , "-lm" , OPTION_MATH_ANY , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PROFILE , VALUE_NUMBER , OPTION_PROFILE_NOPROFILE , PAGE_CODE , GD_PROFILE , CYCLE_KIND , "-prof" , OPTION_PROFILE_PROFILE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LARGECODE , VALUE_NUMBER , OPTION_LARGECODE_LARGECODE , PAGE_CODE , GD_LARGECODE , CYCLE_KIND , "-sc" , OPTION_LARGECODE_SMALLCODE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LARGEDATA , VALUE_NUMBER , OPTION_LARGEDATA_LARGEDATA , PAGE_CODE , GD_LARGEDATA , CYCLE_KIND , "-sd" , OPTION_LARGEDATA_SMALLDATA , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STACKCHECK , VALUE_NUMBER , OPTION_STACKCHECK_NOSTACKCHECK , PAGE_CODE , GD_STACKCHECK , CYCLE_KIND , "-stack-check" , OPTION_STACKCHECK_STACKCHECK , 0 , NULL , NULL , SYNTAX_ACTIVE }, // compiler page { OPTION_CPPCOMMENTS , VALUE_NUMBER , OPTION_CPPCOMMENTS_NOCPPCOMMENTS , PAGE_COMPILER , GD_CPPCOMMENTS , CYCLE_KIND , "-cpp-comments" , OPTION_CPPCOMMENTS_CPPCOMMENTS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_CPPCOMMENTS , VALUE_NUMBER , OPTION_CPPCOMMENTS_NOCPPCOMMENTS , PAGE_COMPILER , GD_CPPCOMMENTS , CYCLE_KIND , "-+" , OPTION_CPPCOMMENTS_CPPCOMMENTS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_C99 , VALUE_NUMBER , OPTION_C99_ISOC1989 , PAGE_COMPILER , GD_C99 , CYCLE_KIND , "-c99" , OPTION_C99_ISOC1999 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEFINES , VALUE_LIST , 0 , PAGE_COMPILER , GD_DEFINES , LISTVIEW_KIND , "-D*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_PREPROCESSED , VALUE_NUMBER , OPTION_PREPROCESSED_NOPREPROCESSED , PAGE_COMPILER , GD_PREPROCESSED , CYCLE_KIND , "-E" , OPTION_PREPROCESSED_KEEPPREPROCESSED , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MEMSIZE , VALUE_NUMBER , OPTION_MEMSIZE_MEMSIZEHUGE , PAGE_COMPILER , GD_MEMSIZE , CYCLE_KIND , "-dontkeep-initialized-data" , OPTION_MEMSIZE_MEMSIZESMALL , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUG , VALUE_NUMBER , OPTION_DEBUG_NODEBUG , PAGE_COMPILER , GD_DEBUG , CYCLE_KIND , "-g" , OPTION_DEBUG_DEBUG , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DEBUGHUNK , VALUE_NUMBER , OPTION_DEBUGHUNK_DEBUGHUNKDWARF2 , PAGE_COMPILER , GD_DEBUGHUNK , CYCLE_KIND , "-hunkdebug" , OPTION_DEBUGHUNK_DEBUGHUNKAMIGA , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_INCLUDES , VALUE_LIST , 0 , PAGE_COMPILER , GD_INCLUDES , LISTVIEW_KIND , "-I*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_INDERMEDIATE , VALUE_NUMBER , OPTION_INTERMEDIATE_NOINTERMEDIATE , PAGE_COMPILER , GD_INTERMEDIATE , CYCLE_KIND , "-k" , OPTION_INTERMEDIATE_KEEPINTERMEDIATE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ASSEMBLE , VALUE_NUMBER , OPTION_ASSEMBLE_ASSEMBLE , PAGE_COMPILER , GD_ASSEMBLE , CYCLE_KIND , "-S" , OPTION_ASSEMBLE_NOASSEMBLE , 0 , NULL , NULL , SYNTAX_ACTIVE }, // linker page { OPTION_EXTRALIB , VALUE_NUMBER , OPTION_EXTRALIB_NOEXTRALIB , PAGE_LINKER , GD_EXTRALIB , CYCLE_KIND , "-lextra" , OPTION_EXTRALIB_EXTRALIB , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LIBPATHS , VALUE_LIST , 0 , PAGE_LINKER , GD_LIBPATHS , LISTVIEW_KIND , "-L*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OBJECTS , VALUE_LIST , 0 , PAGE_LINKER , GD_OBJECTS , LISTVIEW_KIND , "-l*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LINK , VALUE_NUMBER , OPTION_LINK_LINK , PAGE_LINKER , GD_LINKER , CYCLE_KIND , "-c" , OPTION_LINK_NOLINK , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_STDLIB , VALUE_NUMBER , OPTION_STDLIB_STDLIB , PAGE_LINKER , GD_STDLIB , CYCLE_KIND , "-nostdlib" , OPTION_STDLIB_NOSTDLIB , 0 , NULL , NULL , SYNTAX_ACTIVE }, // messages page { OPTION_WARNINGS , VALUE_NUMBER , OPTION_WARNINGS_WARNINGS , PAGE_MESSAGES , GD_WARNINGS , CYCLE_KIND , "-warn=-1" , OPTION_WARNINGS_ALLWARNINGSON , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_WARNINGS , VALUE_NUMBER , OPTION_WARNINGS_WARNINGS , PAGE_MESSAGES , GD_WARNINGS , CYCLE_KIND , "-dontwarn=-1" , OPTION_WARNINGS_ALLWARNINGSOFF , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ENABLED , VALUE_LIST , 0 , PAGE_MESSAGES , GD_ENABLED , LISTVIEW_KIND , "-warn=*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_DISABLED , VALUE_LIST , 0 , PAGE_MESSAGES , GD_DISABLED , LISTVIEW_KIND , "-dontwarn=*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ANSI , VALUE_NUMBER , OPTION_ANSI_NOANSI , PAGE_MESSAGES , GD_ANSI , CYCLE_KIND , "-ansi" , OPTION_ANSI_ANSI , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ISO , VALUE_NUMBER , OPTION_ISO_NOISO , PAGE_MESSAGES , GD_ISO , CYCLE_KIND , "-iso" , OPTION_ISO_ISO , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_MAXERRORS , VALUE_NUMERIC , 0 , PAGE_MESSAGES , GD_MAXERRORS , STRING_KIND , "-maxerrors=*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_HIDEPATH , VALUE_NUMBER , OPTION_HIDEPATH_FULLFILENAMES , PAGE_MESSAGES , GD_HIDEPATH , CYCLE_KIND , "-strip-path" , OPTION_HIDEPATH_HIDEPATHPART , 0 , NULL , NULL , SYNTAX_ACTIVE }, // optimizer page { OPTION_ASSOZIATIVEFP , VALUE_NUMBER , OPTION_ASSOZIATIVEFP_NOASSOZIATIVEFP , PAGE_OPTIMIZER , GD_ASSOZIATIVEFP , CYCLE_KIND , "-fp-assoziative" , OPTION_ASSOZIATIVEFP_ASSOZIATIVEFP , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_INLINESIZE , VALUE_NUMERIC , 0 , PAGE_OPTIMIZER , GD_INLINESIZE , STRING_KIND , "-inline-size=*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZEALIAS , VALUE_NUMBER , OPTION_OPTIMIZEALIAS_OPTIMIZEALIAS , PAGE_OPTIMIZER , GD_OPTIMIZEALIAS , CYCLE_KIND , "-no-alias-opt" , OPTION_OPTIMIZEALIAS_NOOPTIMIZEALIAS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZEINLINE , VALUE_NUMBER , OPTION_OPTIMIZEINLINE_OPTIMIZEINLINE , PAGE_OPTIMIZER , GD_OPTIMIZEINLINE , CYCLE_KIND , "-no-inline-peephole" , OPTION_OPTIMIZEINLINE_NOOPTIMIZEINLINE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZEPEEPHOLE , VALUE_NUMBER , OPTION_OPTIMIZEPEEPHOLE_OPTIMIZEPEEPHOLE , PAGE_OPTIMIZER , GD_OPTIMIZEPEEPHOLE , CYCLE_KIND , "-no-peephole" , OPTION_OPTIMIZEPEEPHOLE_NOOPTIMIZEPEEPHOLE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , OPTION_OPTIMIZE_NOOPTIMIZE , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-O" , OPTION_OPTIMIZE_OPTIMIZESOME , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , OPTION_OPTIMIZE_NOOPTIMIZE , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-O0" , OPTION_OPTIMIZE_NOOPTIMIZE , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , OPTION_OPTIMIZE_NOOPTIMIZE , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-O2" , OPTION_OPTIMIZE_OPTIMIZEMOST , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , OPTION_OPTIMIZE_NOOPTIMIZE , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-O3" , OPTION_OPTIMIZE_OPTIMIZEALL , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , OPTION_OPTIMIZE_NOOPTIMIZE , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-O4" , OPTION_OPTIMIZE_OPTIMIZECROSSMODULE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZE , VALUE_NUMBER , OPTION_OPTIMIZE_NOOPTIMIZE , PAGE_OPTIMIZER , GD_OPTIMIZER , CYCLE_KIND , "-O=0" , OPTION_OPTIMIZE_NOOPTIMIZE , RULE_DONOTSAVE , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZESCHEDULE , VALUE_NUMBER , OPTION_OPTIMIZESCHEDULE_NOOPTIMIZESCHEDULE , PAGE_OPTIMIZER , GD_OPTIMIZESCHEDULE , CYCLE_KIND , "-schedule" , OPTION_OPTIMIZESCHEDULE_OPTIMIZESCHEDULE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZESIZE , VALUE_NUMBER , OPTION_OPTIMIZESIZE_NOOPTIMIZESIZE , PAGE_OPTIMIZER , GD_OPTIMIZESIZE , CYCLE_KIND , "-size" , OPTION_OPTIMIZESIZE_OPTIMIZESIZE , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_OPTIMIZESPEED , VALUE_NUMBER , OPTION_OPTIMIZESPEED_NOOPTIMIZESPEED , PAGE_OPTIMIZER , GD_OPTIMIZESPEED , CYCLE_KIND , "-speed" , OPTION_OPTIMIZESPEED_OPTIMIZESPEED , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_UNROLLALL , VALUE_NUMBER , OPTION_UNROLLALL_NOUNROLLALL , PAGE_OPTIMIZER , GD_UNROLLALL , CYCLE_KIND , "-unroll-all" , OPTION_UNROLLALL_UNROLLALL , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_UNROLLSIZE , VALUE_NUMERIC , 0 , PAGE_OPTIMIZER , GD_UNROLLSIZE , STRING_KIND , "-unroll-size=*" , 0 , 0 , NULL , NULL , SYNTAX_ACTIVE }, // ppc page { OPTION_MERGEFPCONST , VALUE_NUMBER , OPTION_MERGEFPCONST_NOMERGECONST , PAGE_PPC , GD_MERGEFPCONST , CYCLE_KIND , "-merge-constants" , OPTION_MERGEFPCONST_MERGECONSTANTS , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_RODATA , VALUE_NUMBER , OPTION_RODATA_CONSTINRODATA , PAGE_PPC , GD_RODATA , CYCLE_KIND , "-const-in-data" , OPTION_RODATA_CONSTINDATA , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FSUBZERO , VALUE_NUMBER , OPTION_FSUBZERO_NOFSUBZERO , PAGE_PPC , GD_FSUBZERO , CYCLE_KIND , "-fsub-zero" , OPTION_FSUBZERO_FSUBZERO , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_AMIGAALIGN , VALUE_NUMBER , OPTION_AMIGAALIGN_NOAMIGAALIGN , PAGE_PPC , GD_AMIGAALIGN , CYCLE_KIND , "-amiga-align" , OPTION_AMIGAALIGN_AMIGAALIGN , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ELF , VALUE_NUMBER , OPTION_ELF_NOELF , PAGE_PPC , GD_ELF , CYCLE_KIND , "-elf" , OPTION_ELF_PREFIXELF , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_POWEROPEN , VALUE_NUMBER , OPTION_POWEROPEN_NOPOWEROPENABI , PAGE_PPC , GD_POWEROPEN , CYCLE_KIND , "-poweropen" , OPTION_POWEROPEN_POWEROPENABI , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_POWEROPEN , VALUE_NUMBER , OPTION_POWEROPEN_NOPOWEROPENABI , PAGE_PPC , GD_POWEROPEN , CYCLE_KIND , "-sc" , OPTION_POWEROPEN_POWEROPENABISTORMC , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_REGISTERNAMES , VALUE_NUMBER , OPTION_REGISTERNAMES_USEREGISTERNAMES , PAGE_PPC , GD_REGISTERNAMES , CYCLE_KIND , "-no-regnames" , OPTION_REGISTERNAMES_NOREGISTERNAMES , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_SETCCS , VALUE_NUMBER , OPTION_SETCCS_NOCCSSIGNAL , PAGE_PPC , GD_SETCCS , CYCLE_KIND , "-setccs" , OPTION_SETCCS_SETCCSSIGNAL , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_LMW , VALUE_NUMBER , OPTION_LMW_NOLMWSTMW , PAGE_PPC , GD_LMW , CYCLE_KIND , "-use-lmw" , OPTION_LMW_USELMWSTMW , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_FMADD , VALUE_NUMBER , OPTION_FMADD_NOFMADDFMSUB , PAGE_PPC , GD_FMADD , CYCLE_KIND , "-madd" , OPTION_FMADD_USEFMADDFMSUB , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_EMBEDDEDABI , VALUE_NUMBER , OPTION_EMBEDDEDABI_NOEMBEDDEDABI , PAGE_PPC , GD_EMBEDDEDABI , CYCLE_KIND , "-eabi" , OPTION_EMBEDDEDABI_EMBEDDEDABI , 0 , NULL , NULL , SYNTAX_ACTIVE }, { OPTION_ALIGNSTACK , VALUE_NUMBER , OPTION_ALIGNSTACK_ALIGNSTACK , PAGE_PPC , GD_ALIGNSTACK , CYCLE_KIND , "-no-align-args" , OPTION_ALIGNSTACK_NOALIGNSTACK , 0 , NULL , NULL , SYNTAX_ACTIVE }, // OPTION_OPTIONS is last entry to catch unknown options ("*" template) { OPTION_OPTIONS , VALUE_LIST , 0 , PAGE_SPECIAL , GD_OPTIONS , LISTVIEW_KIND , "*" , UNDEFINED , 0 , NULL , NULL , SYNTAX_ACTIVE }, OPTIONS_MAXIMUM }; /* ---------------------------------- PageLayout ------------------------------- Layouts of dialog pages, in order of PAGE_ID */ struct PageLayout Layouts[PAGE_MAXIMUM] = { // gadgets count gadget tags gadget types gadget data textual labels { INDEX_CNT , INDEXGTags , INDEXGTypes , INDEXNGad , NULL }, { COMPILER_CNT , COMPILERGTags , COMPILERGTypes , COMPILERNGad , NULL }, { MESSAGES_CNT , MESSAGESGTags , MESSAGESGTypes , MESSAGESNGad , NULL }, { CODE_CNT , CODEGTags , CODEGTypes , CODENGad , NULL }, { OPTIMIZER_CNT , OPTIMIZERGTags , OPTIMIZERGTypes , OPTIMIZERNGad , OPTIMIZERIText }, { LINKER_CNT , LINKERGTags , LINKERGTypes , LINKERNGad , NULL }, { SPECIAL_CNT , SPECIALGTags , SPECIALGTypes , SPECIALNGad , NULL }, { PPC_CNT , PPCGTags , PPCGTypes , PPCNGad , NULL } }; #endif /// /// "main" /* ----------------------------------- main ------------------------------------ CLI entry point */ int main(int argc, char **argv) { NewList(&Config.Windows); if (GadToolsBase->lib_Version >= 39) { STATIC UBYTE template[] = "FILE/K,PUBSCREEN/K,EDIT/S"; struct RDArgs *rdArgs; LONG argArray[3]; memset(argArray, 0, sizeof(argArray)); // parse startup arguments if (rdArgs = ReadArgs(template, argArray, NULL)) { UBYTE *file; UBYTE *pubscreen; BOOL edit; file = (UBYTE *)argArray[0]; pubscreen = (UBYTE *)argArray[1]; edit = (BOOL )argArray[2]; if ((pubscreen == NULL) || (*pubscreen == 0)) pubscreen = "Workbench"; strncpy(Config.Pubscreen, pubscreen, MAX_SCREEN); if ((file == NULL) || (*file == 0)) file = OPTIONS; strncpy(Config.File, file, MAX_PATHLEN); // load configuration InitOptions(&Config.Options); LoadOptions(&Config.Options, file, LOADMODE_MERGE, FALSE); // open user interface ? if (edit) { struct WindowSupportInfo *info; if (info = ShowUserInterface()) { info->Options = &Config.Options; if (ShowPage(info, PAGE_INDEX)) { WindowLoop(info); } CloseUserInterface(); } } else SaveOptions(&Config.Options, "*"); // clean up FreeOptions(&Config.Options); FreeArgs(rdArgs); return(0); } } else Warn("gadtools.library 39.0 required !", NULL); return(20); } /// /// "loop" /* --------------------------------- WindowLoop -------------------------------- Event-processing loop */ void WindowLoop(struct WindowSupportInfo *info) { struct Window *win = info->Window; while (win) { struct IntuiMessage *msg; WaitPort(win->UserPort); while (msg = GT_GetIMsg(win->UserPort)) { struct IntuiMessage imsg = *msg; // convert message from boopsi gadget to IDCMP_GADGETUP if (msg->Class == IDCMP_IDCMPUPDATE) { struct TagItem *tag; for (tag = (struct TagItem *)msg->IAddress; tag->ti_Tag; ++tag) { switch (tag->ti_Tag) { case BOOPSI_ATTRIB_ADDRESS: imsg.IAddress = (struct Gadget *)tag->ti_Data; imsg.Class = IDCMP_GADGETUP; break; case GTCY_Active: imsg.Code = (ULONG)tag->ti_Data; break; } } } GT_ReplyIMsg(msg); switch (imsg.Class) { case IDCMP_MENUPICK: { UWORD item = ITEMNUM(imsg.Code); switch (item) { case MENU_RESET: case MENU_RESETPAGE: DetachGadgets(info, TRUE); if (item == MENU_RESETPAGE) ResetOptions(&Config.Options, info->Page); else ResetOptions(&Config.Options, UNDEFINED); ShowPage(info, info->Page); break; case MENU_ABOUT: Warn("Author: Dietmar Eilert (mail@dietmar-eilert.de)", NULL); break; } } break; case IDCMP_GADGETUP: { struct Gadget *gadget = (struct Gadget *)imsg.IAddress; // process click switch (info->Page) { case PAGE_INDEX: switch (gadget->GadgetID) { case GD_CANCEL: CloseWindowSafely(info); return; case GD_SAVE: if (info->Options) { ReadPage(info); if (SaveOptions(info->Options, Config.File)) { CloseWindowSafely(info); return; } } break; case GD_SAVEDEFAULT: if (info->Options) { ReadPage(info); SaveOptions(info->Options, "env:" OPTIONS); SaveOptions(info->Options, "envarc:" OPTIONS); } break; case GD_LINKEROPTIONS: ShowPage(info, PAGE_LINKER); break; case GD_OPTIMIZEROPTIONS: ShowPage(info, PAGE_OPTIMIZER); break; case GD_COMPILEROPTIONS: ShowPage(info, PAGE_COMPILER); break; case GD_MESSAGEOPTIONS: ShowPage(info, PAGE_MESSAGES); break; case GD_OTHEROPTIONS: ShowPage(info, PAGE_SPECIAL); break; #ifdef TARGET_GCC case GD_LANGUAGEOPTIONS: ShowPage(info, PAGE_LANGUAGE); break; case GD_PREPROCESSOROPTIONS: ShowPage(info, PAGE_PREPROCESSOR); break; case GD_DEBUGGEROPTIONS: ShowPage(info, PAGE_DEBUGGER); break; case GD_M68KOPTIONS: ShowPage(info, PAGE_M68K); break; case GD_INLINEOPTIONS: ShowPage(info, PAGE_INLINE); break; #endif #ifdef TARGET_VBCC case GD_CODEOPTIONS: ShowPage(info, PAGE_CODE); break; case GD_PPCOPTIONS: ShowPage(info, PAGE_PPC); break; #endif default: DefaultGadgetHandler(info, gadget->GadgetID); } break; case PAGE_COMPILER: switch (gadget->GadgetID) { case GD_OKCOMPILER: ShowPage(info, PAGE_INDEX); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; case PAGE_MESSAGES: switch (gadget->GadgetID) { case GD_OKMESSAGES: ShowPage(info, PAGE_INDEX); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; case PAGE_OPTIMIZER: switch (gadget->GadgetID) { case GD_OKOPTIMIZER: ShowPage(info, PAGE_INDEX); break; #ifdef TARGET_GCC case GD_DETAILS: ShowPage(info, PAGE_DETAILS); break; #endif default: DefaultGadgetHandler(info, gadget->GadgetID); } break; case PAGE_LINKER: switch (gadget->GadgetID) { case GD_OKLINKER: ShowPage(info, PAGE_INDEX); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; case PAGE_SPECIAL: switch (gadget->GadgetID) { case GD_OKSPECIAL: ShowPage(info, PAGE_INDEX); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; #ifdef TARGET_GCC case PAGE_LANGUAGE: switch (gadget->GadgetID) { case GD_CPLUSPLUSOPTIONS: ShowPage(info, PAGE_CPLUSPLUS); break; case GD_OKLANGUAGE: ShowPage(info, PAGE_INDEX); break; default: DefaultGadgetHandler(info, gadget->GadgetID); break; } break; case PAGE_PREPROCESSOR: switch (gadget->GadgetID) { case GD_OKPREPROCESSOR: ShowPage(info, PAGE_INDEX); break; default: DefaultGadgetHandler(info, gadget->GadgetID); break; } break; case PAGE_CPLUSPLUS: switch (gadget->GadgetID) { case GD_OKCPLUSPLUS: ShowPage(info, PAGE_LANGUAGE); break; default: DefaultGadgetHandler(info, gadget->GadgetID); break; } break; case PAGE_DETAILS: switch (gadget->GadgetID) { case GD_OKDETAILS: ShowPage(info, PAGE_OPTIMIZER); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; case PAGE_INLINE: switch (gadget->GadgetID) { case GD_OKINLINE: ShowPage(info, PAGE_INDEX); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; case PAGE_PPC: switch (gadget->GadgetID) { case GD_OKPPC: ShowPage(info, PAGE_M68K); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; case PAGE_M68K: switch (gadget->GadgetID) { case GD_OKM68K: ShowPage(info, PAGE_INDEX); break; case GD_PPC: ShowPage(info, PAGE_PPC); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; case PAGE_DEBUGGER: switch (gadget->GadgetID) { case GD_OKDEBUGGER: ShowPage(info, PAGE_INDEX); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; #endif #ifdef TARGET_VBCC case PAGE_CODE: switch (gadget->GadgetID) { case GD_OKCODE: ShowPage(info, PAGE_INDEX); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; case PAGE_PPC: switch (gadget->GadgetID) { case GD_OKPPC: ShowPage(info, PAGE_INDEX); break; default: DefaultGadgetHandler(info, gadget->GadgetID); } break; #endif } } break; case IDCMP_REFRESHWINDOW: BeginRefresh(win); EndRefresh(win, TRUE); break; default: break; } } } } /// /// "syntax" /* --------------------------------- InitSyntax -------------------------------- Reset state of syntax rules (some command line options are not available until an "activation option" enables it). */ void InitSyntax() { struct Syntax *syntax; for (syntax = Syntax; syntax->ID < OPTIONS_MAXIMUM; ++syntax) { syntax->Status = (syntax->Enable) ? SYNTAX_INACTIVE : SYNTAX_ACTIVE; } } /// /// "options" /* -------------------------------- InitOptions -------------------------------- Prepare <options> for use */ void InitOptions(struct Options *options) { UWORD ID; // loop through all options for (ID = 0; ID < OPTIONS_MAXIMUM; ++ID) { struct Syntax *syntax; // find rule in syntax table for (syntax = Syntax; syntax->ID < OPTIONS_MAXIMUM; ++syntax) { if (syntax->ID == ID) { struct Value *value = &options->Values[ID]; value->Type = syntax->Type; switch (syntax->Type) { case VALUE_NUMBER: // set default value value->Number = syntax->Value; break; case VALUE_LIST: NewList(&value->List); break; } break; } } if (syntax->ID == OPTIONS_MAXIMUM) { Warn(Assert, (APTR)__LINE__); } } } /* -------------------------------- FreeOptions -------------------------------- Free memory allocated for <options> */ void FreeOptions(struct Options *options) { UWORD ID; for (ID = 0; ID < OPTIONS_MAXIMUM; ++ID) { FreeValue(&options->Values[ID]); } } /* --------------------------------- ResetOptions --------------------------------- Reset options associated with <page> (or all options if <page> is UNDEFINED). */ void ResetOptions(struct Options *options, UWORD page) { if (page == UNDEFINED) { FreeOptions(&Config.Options); InitOptions(&Config.Options); } else { // loop through all options UWORD ID; for (ID = 0; ID < OPTIONS_MAXIMUM; ++ID) { struct Syntax *syntax; // scan syntax table and decide if option is displayed on <page> for (syntax = Syntax; syntax->ID < OPTIONS_MAXIMUM; ++syntax) { if ((syntax->ID == ID) && (syntax->Page == page)) { FreeValue(&options->Values[ID]); } } } } } /* -------------------------------- SaveOptions -------------------------------- Save options to file (or to stdout if <file> is "*") */ BOOL SaveOptions(struct Options *options, UBYTE *file) { UBYTE *buffer; LONG error; error = 0; // allocate buffer for one line if (buffer = (UBYTE *)AllocVec(MAX_NAME + 1 + MAX_PATHLEN + 1, MEMF_ANY)) { UWORD separator; BOOL console; BPTR handle; // print to stdout ? if (console = (*file == '*')) { handle = Output(); separator = ' '; } else { handle = Open(file, MODE_NEWFILE); separator = '\n'; } if (handle) { struct Syntax *syntax; BOOL save[OPTIONS_MAXIMUM]; memset(save, TRUE, sizeof(save)); // loop through all rules in syntax table for (syntax = Syntax; (syntax->ID < OPTIONS_MAXIMUM) && (error == 0); ++syntax) { // does rule contain enough information to be used for saving ? if (syntax->Template && ((syntax->Flags & RULE_DONOTSAVE) == 0)) { UWORD ID = syntax->ID; // option associated with this rule no yet saved ? if (save[ID]) { // get (and validate) type of option struct Value *value = &options->Values[ID]; if (value->Type == syntax->Type) { UBYTE *fillin; strcpy(buffer, syntax->Template); if (fillin = strrchr(buffer, '*')) { // syntax rule for option with argument; save option switch (value->Type) { case VALUE_NUMERIC: case VALUE_STRING: if (value->String && *value->String) { strcpy(fillin, value->String); // enabling sequence required ? if (syntax->Enable) { if (FPuts(handle, syntax->Enable) || (FPutC(handle, separator) != separator)) { error = TRUE; } } if (FPuts(handle, buffer) || (FPutC(handle, separator) != separator)) { error = TRUE; } else save[ID] = FALSE; } break; case VALUE_NUMBER: // enabling sequence required ? if (syntax->Enable) { if (FPuts(handle, syntax->Enable) || (FPutC(handle, separator) != separator)) { error = TRUE; } } sprintf(fillin, "%d", value->Number); if (FPuts(handle, buffer) || (FPutC(handle, separator) != separator)) { error = TRUE; } else save[ID] = FALSE; break; case VALUE_LIST: if (value->List.lh_Head->ln_Succ) { struct Node *node; // enabling sequence required ? if (syntax->Enable) { if (FPuts(handle, syntax->Enable) || (FPutC(handle, separator) != separator)) { error = TRUE; } } for (node = value->List.lh_Head; node && node->ln_Succ; node = node->ln_Succ) { if (node->ln_Name) strcpy(fillin, node->ln_Name); else *fillin = 0; if (FPuts(handle, buffer) || (FPutC(handle, separator) != separator)) { error = TRUE; break; } else save[ID] = FALSE; } } break; } } else { // syntax rule for option without argument; save option switch (syntax->Type) { case VALUE_NUMBER: // does syntax rule apply to current value of option ? if (value->Number == syntax->TemplateValue) { // enabling sequence required ? if (syntax->Enable) { if (FPuts(handle, syntax->Enable) || (FPutC(handle, separator) != separator)) { error = TRUE; } } if (FPuts(handle, syntax->Template) || (FPutC(handle, separator) != separator)) { error = TRUE; break; } else save[ID] = FALSE; } } } } else Warn(Assert, (APTR)__LINE__); } } } if (error) Warn("Write error while saving to <%s> !", file); if (!console) Close(handle); } else Warn("Can not open <%s> (for writing !)", file); FreeVec(buffer); } if (error == 0) return(TRUE); return(FALSE); } /* --------------------------------- SetOption --------------------------------- Set option indentified by <ID> to <optionvalue> (string or number) */ void SetOption(struct Options *options, UWORD ID, APTR optionvalue) { struct Syntax *syntax; for (syntax = Syntax; syntax->ID < OPTIONS_MAXIMUM; ++syntax) { if (syntax->ID == ID) { struct Value *value = &options->Values[syntax->ID]; switch (value->Type) { case VALUE_NUMBER: SetValueNumber(value, (UWORD)optionvalue); break; case VALUE_NUMERIC: case VALUE_STRING: SetValueString(value, (UBYTE *)optionvalue); break; default: Warn(Assert, (APTR)__LINE__); } break; } } } /* -------------------------------- LoadOptions -------------------------------- Load options from file */ BOOL LoadOptions(struct Options *options, UBYTE *file, UWORD mode, BOOL warn) { UBYTE *buffer; LONG error; error = 0; // allocate buffer for one line if (buffer = (UBYTE *)AllocVec(MAX_NAME + 1 + MAX_PATHLEN + 1, MEMF_ANY)) { BPTR handle; if (handle = Open(file, MODE_OLDFILE)) { // reset syngtax (some syntax options are not available until enabled) InitSyntax(); while (FGets(handle, buffer, MAX_NAME + 1 + MAX_PATHLEN + 1)) { UBYTE *eol; // remove linefeed and/or CR if (eol = strchr(buffer, 10)) *eol = 0; if (eol = strchr(buffer, 13)) *eol = 0; if (*buffer) { struct Syntax *syntax; BOOL parsed; // loop through all enabling/disabling sequences parsed = FALSE; for (syntax = Syntax; syntax->ID < OPTIONS_MAXIMUM; ++syntax) { if (syntax->Enable && (strcmp(buffer, syntax->Enable) == 0)) { syntax->Status = SYNTAX_ACTIVE; parsed = TRUE; } if (syntax->Disable && (strcmp(buffer, syntax->Disable) == 0)) { syntax->Status = SYNTAX_INACTIVE; parsed = TRUE; } } // loop through all rules in syntax table if (parsed == FALSE) { for (syntax = Syntax; (syntax->ID < OPTIONS_MAXIMUM) && (error == 0); ++syntax) { if (syntax->Status != SYNTAX_INACTIVE) { UBYTE *template; // does rule contain enough information to be used for parsing ? if (template = syntax->Template) { UBYTE *next; BOOL match; // does rule's template match line in file ? match = TRUE; for (next = buffer; *template != '*'; ++next, ++template) { if (*next != *template) { match = FALSE; break; } else if (*template == 0) break; } if (match) { // get (and validate) type of option struct Value *value = &options->Values[syntax->ID]; if (syntax->Type == value->Type) { switch (value->Type) { case VALUE_NUMBER: SetValueNumber(value, syntax->TemplateValue); break; case VALUE_LIST: { struct Node *node; UBYTE *fillin; UBYTE *name; // skip over option name to argument name = buffer; if (fillin = strchr(syntax->Template, '*')) name += (fillin - syntax->Template); while (*name == ' ') ++name; // remove existing conflicting entries ? if (mode == LOADMODE_REPLACE) FreeDupes(&value->List, name); // add argument to list if (node = CreateNode(name)) AddTail(&value->List, node); } break; case VALUE_NUMERIC: case VALUE_STRING: { // skip over option name to argument UBYTE *name; UBYTE *fillin; name = buffer; if (fillin = strchr(syntax->Template, '*')) name += (fillin - syntax->Template); while (*name == ' ') ++name; SetValueString(value, name); } break; } } else Warn(Assert, (APTR)__LINE__); // line has been parsed break; } } } } } } } if (error == 0) error = IoErr(); if (error) Warn("Write error while reading from <%s> !", file); Close(handle); } else if (warn) Warn("Can not open <%s> (for reading) !", file); FreeVec(buffer); } if (error) return(FALSE); else return(TRUE); } /// /// "values" /* --------------------------------- SetValueNumber ---------------------------- Set numeric value. */ UWORD SetValueNumber(struct Value *value, UWORD number) { switch (value->Type) { case VALUE_NUMBER: value->Number = number; break; default: Warn(Assert, (APTR)__LINE__); } return(value->Number); } /* ---------------------------------- SetValueString --------------------------- Set string value. Buffer for string is allocated dynamically (and not reallocated if new value is shorter than previous value). Caller be careful: Empty strings (<string> == "") are either stored as NULL pointer OR as empty string "\0" (if we already have allocated a buffer). */ UBYTE * SetValueString(struct Value *value, UBYTE *string) { UBYTE numeric[16]; // validate option type switch (value->Type) { case VALUE_NUMERIC: // convert to all-digits (unless empty) if (*string) { sprintf(numeric, "%d", atol(string)); string = numeric; } // fall through case VALUE_STRING: { ULONG oldsize, newsize; // get current size of string buffer if (value->String) oldsize = MEMSIZE(value->String); else oldsize = 0; if (newsize = strlen(string)) { ++newsize; // do we have to allocate a larger string buffer for new value ? if (newsize > oldsize) { if (oldsize) FreeVec(value->String); value->String = (UBYTE *)AllocVec(newsize, MEMF_ANY); } if (value->String) strcpy(value->String, string); } else if (oldsize) *value->String = 0; } break; default: Warn(Assert, (APTR)__LINE__); } return(value->String); } /* ------------------------------ GetValueNumber ------------------------------- Get numeric value */ UWORD GetValueNumber(struct Value *value) { switch (value->Type) { case VALUE_NUMBER: return(value->Number); break; default: Warn(Assert, (APTR)__LINE__); return(UNDEFINED); } } /* ------------------------------ GetValueString ------------------------------- Get string value */ UBYTE * GetValueString(struct Value *value) { switch (value->Type) { case VALUE_STRING: case VALUE_NUMERIC: return(value->String); break; default: Warn(Assert, (APTR)__LINE__); return(NULL); } } /* ------------------------------ GetValueList --------------------------------- Get list value */ struct List * GetValueList(struct Value *value) { switch (value->Type) { case VALUE_LIST: return(&value->List); break; default: Warn(Assert, (APTR)__LINE__); return((struct List *)NULL); } } /* -------------------------------- FreeValue ---------------------------------- Free (and reset) specified value */ void FreeValue(struct Value *value) { switch (value->Type) { case VALUE_NUMBER: value->Number = 0; break; case VALUE_NUMERIC: case VALUE_STRING: if (value->String) { FreeVec(value->String); value->String = NULL; } break; case VALUE_LIST: FreeNodes(&value->List); break; } } /// /// "gui" /* ----------------------------- ShowUserInterface ----------------------------- Create main window */ struct WindowSupportInfo * ShowUserInterface() { // create gadget class if (Config.Context.IClass = MakeClass(NULL, "gadgetclass", NULL, sizeof(struct BoopsiGadget), 0)) { Config.Context.IClass->cl_Dispatcher.h_Entry = (HOOKFUNC)boopsi_GadgetDispatch; Config.Context.IClass->cl_UserData = (ULONG)&Config.Context; // lock screen PubScreenName = Config.Pubscreen; if (SetupScreen() == 0) { if (Config.Device = boopsi_CreateDeviceContext(Scr, Scr->RastPort.Font)) { struct WindowSupportInfo *info; // create menu if (Config.Menu = CreateMenus(NewMenu, TAG_DONE)) { if (LayoutMenus(Config.Menu, VisualInfo, GTMN_NewLookMenus, TRUE, TAG_DONE) == FALSE) { FreeMenus(Config.Menu); Config.Menu = NULL; } } // open (empty) window if (info = OpenDialog(INDEXLeft, INDEXTop, INDEXWidth, INDEXHeight, PROGRAMNAME " ©2003 Dietmar Eilert", WFLG_DRAGBAR | WFLG_SMART_REFRESH | WFLG_DEPTHGADGET | WFLG_ACTIVATE)) { // attach menu if (Config.Menu) SetMenuStrip(info->Window, Config.Menu); return(info); } } } } else Warn("Gadget class initialization failed !", NULL); CloseUserInterface(); return(NULL); } /* ---------------------------- CloseUserInterface ----------------------------- Close main window and release screen */ void CloseUserInterface() { struct WindowSupportInfo *info, *next; for (info = (struct WindowSupportInfo *)Config.Windows.lh_Head; next = (struct WindowSupportInfo *)info->Node.ln_Succ; info = next) { CloseWindowSafely(info); } if (Config.Device) { boopsi_FreeDeviceContext(Config.Device); Config.Device = NULL; } CloseDownScreen(); if (Config.Menu) { FreeMenus(Config.Menu); Config.Menu = NULL; } if (Config.Context.IClass) { FreeClass(Config.Context.IClass); Config.Context.IClass = NULL; } } /* -------------------------------- OpenDialog --------------------------------- Open window (<win_w> and <win_h> are scaled based on what font is used) */ struct WindowSupportInfo * OpenDialog(UWORD win_x, UWORD win_y, UWORD win_w, UWORD win_h, UBYTE *title, ULONG flags) { struct WindowSupportInfo *info; if (info = (struct WindowSupportInfo *)AllocVec(sizeof(struct WindowSupportInfo), MEMF_ANY | MEMF_CLEAR)) { // open window LayoutDialog(info, win_w, win_h); if ((win_x + info->WinW) > Scr->Width) win_x = Scr->Width - info->WinW; if ((win_y + info->WinH) > Scr->Height) win_y = Scr->Height - info->WinH; info->Window = OpenWindowTags(NULL, WA_Flags, flags, WA_Left, win_x, WA_Top, win_y, WA_Width, info->WinW, WA_Height, info->WinH, WA_Title, title, WA_ScreenTitle, title, WA_PubScreen, Scr, WA_NewLookMenus, TRUE, WA_IDCMP, IDCMP_REFRESHWINDOW | IDCMP_MENUPICK | IDCMP_IDCMPUPDATE | IDCMP_NEWSIZE | BUTTONIDCMP | LISTVIEWIDCMP | CYCLEIDCMP | STRINGIDCMP, TAG_DONE ); if (info->Window) { // connect info with window info->Window->UserData = (BYTE *)info; AddTail(&Config.Windows, &info->Node); return(info); } FreeVec(info); } return(NULL); } /* ----------------------------- CloseWindowSafely ----------------------------- Close window */ void CloseWindowSafely(struct WindowSupportInfo *info) { struct Window *win; Remove(&info->Node); if (win = info->Window) { DetachGadgets(info, FALSE); ClearMenuStrip(win); CloseWindow(win); } FreeVec(info); } /* ---------------------------- DiscardInputEvents ----------------------------- Discard unprocessed input */ void DiscardInputEvents(struct Window *win) { struct IntuiMessage *imsg; while (imsg = (struct IntuiMessage *)GT_GetIMsg(win->UserPort)) GT_ReplyIMsg(imsg); } /* -------------------------------- LayoutDialog ------------------------------- Choose font for dialog of specified size */ void LayoutDialog(struct WindowSupportInfo *info, UWORD width, UWORD height) { struct TextFont *screenfont = Scr->RastPort.Font; info->TextAttr.ta_Name = screenfont->tf_Message.mn_Node.ln_Name; info->TextAttr.ta_YSize = screenfont->tf_YSize; info->FontY = screenfont->tf_YSize; // calculate average width of characters in font info->FontX = (TextLength(&Scr->RastPort, "TESTtest", 8) + 4) / 8; info->OffX = Scr->WBorLeft; info->OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1; info->WinW = ScaleX(info, width ) + info->OffX + Scr->WBorRight ; info->WinH = ScaleY(info, height) + info->OffY + Scr->WBorBottom; // fall back to topaz ? if ((info->WinW > Scr->Width) || (info->WinH >Scr->Height)) { info->TextAttr.ta_Name = "topaz.font"; info->TextAttr.ta_YSize = 8; info->FontX = 8; info->FontY = 8; info->WinW = ScaleX(info, width ) + info->OffX + Scr->WBorRight ; info->WinH = ScaleY(info, height) + info->OffY + Scr->WBorBottom; } } /* ---------------------------------- ScaleX ----------------------------------- Scale <value> */ UWORD ScaleX(struct WindowSupportInfo *info, UWORD value) { return((UWORD)(((info->FontX * value) + 4) / 8)); } /* ---------------------------------- ScaleY ----------------------------------- Scale <value>. 14 pixel is gadget height for topaz 8, ie. 14 - 8 = 6 "border pixels" and 8 text pixels (scaling required). */ UWORD ScaleY(struct WindowSupportInfo *info, UWORD value) { return((UWORD)((value * (info->FontY + 6)) / 14)); } /* --------------------------------- ShowPage ---------------------------------- Show specified page */ BOOL ShowPage(struct WindowSupportInfo *info, UWORD page) { struct Window *win; UWORD x; UWORD y; win = info->Window; DetachGadgets(info, TRUE); // render separator line x = info->OffX + ScaleX(info, 10 ); y = info->OffY + ScaleY(info, 157); SetAPen (win->RPort, 0); RectFill(win->RPort, win->BorderLeft, win->BorderTop, win->Width - win->BorderRight - 1, win->Height - win->BorderBottom - 1); boopsi_Line3D(&Config.Context, Config.Device, info->Window->RPort, x, y, ScaleX(info, 612), 0); if (page < PAGE_MAXIMUM) { struct PageLayout *layout = &Layouts[page]; info->Layout = layout; info->Page = page; if (layout->Gadgets < MAX_GADGETS) { struct Gadget *gadget; if (gadget = CreateContext(&info->Context)) { struct NewGadget ng; UWORD magnetic[12]; ULONG *tags; UWORD ID; UWORD delta; UWORD n; tags = layout->Tags; ng.ng_TextAttr = &info->TextAttr; ng.ng_VisualInfo = VisualInfo; // calculate best button spacing (one free row between buttons) delta = ScaleY(info, 14) + 1; // calculate magnetic points for improved gadget positioning magnetic[0] = info->OffY + ScaleY(info, 9); for (n = 1; n < 12; ++n) { magnetic[n] = magnetic[n - 1] + delta; } for (ID = 0; ID < layout->Gadgets; ++ID) { ULONG boopsitags[50]; ULONG *tagptr; struct NewGadget *template; UWORD n; UWORD kind; template = &layout->NewGadget[ID]; ng.ng_GadgetID = ID; ng.ng_GadgetText = template->ng_GadgetText; ng.ng_Flags = template->ng_Flags; ng.ng_LeftEdge = ScaleX(info, template->ng_LeftEdge) + info->OffX; ng.ng_TopEdge = ScaleY(info, template->ng_TopEdge ) + info->OffY; ng.ng_Width = ScaleX(info, template->ng_Width ); ng.ng_Height = ScaleY(info, template->ng_Height ); // y-coordinate near magnetic point ? for (n = 0; n < 12; ++n) { if (magnetic[n] > ng.ng_TopEdge) { if ((magnetic[n] - ng.ng_TopEdge) <= 3) ng.ng_TopEdge = magnetic[n]; break; } else if ((ng.ng_TopEdge - magnetic[n]) <= 3) { ng.ng_TopEdge = magnetic[n]; break; } } // convert gadtools gadgets to boopsi gadgets (and add tags required for boopsi gadgets) tagptr = boopsitags; switch (kind = layout->Types[ID]) { case CYCLE_KIND: kind = BOOPSI_DROPBOX_KIND; *tagptr++ = (ULONG)BOOPSI_ATTRIB_FLAGS; // highlight default entry in dropbox *tagptr++ = (ULONG)BOOPSI_FLAGS_FANCY; break; case BUTTON_KIND: kind = BOOPSI_BUTTON_KIND; // attach pop-up menu to button ? #ifdef TARGET_GCC switch (page) { case PAGE_MESSAGES: switch (ID) { case GD_ADDDISABLED: case GD_ADDENABLED: { *tagptr++ = (ULONG)GTCY_Labels; *tagptr++ = (ULONG)SuggestionsForWarnings; } break; } } #endif break; } // create gadget switch (kind) { case BOOPSI_BUTTON_KIND: case BOOPSI_DROPBOX_KIND: *tagptr++ = (ULONG)BOOPSI_ATTRIB_KIND; *tagptr++ = (ULONG)kind; *tagptr++ = (ULONG)BOOPSI_ATTRIB_DEVICE; *tagptr++ = (ULONG)Config.Device; *tagptr++ = (ULONG)BOOPSI_ATTRIB_PLACEMENT; *tagptr++ = (ULONG)ng.ng_Flags; *tagptr++ = (ULONG)GA_ID; *tagptr++ = (ULONG)ID; *tagptr++ = (ULONG)GA_Top; *tagptr++ = (ULONG)ng.ng_TopEdge; *tagptr++ = (ULONG)GA_Left; *tagptr++ = (ULONG)ng.ng_LeftEdge; *tagptr++ = (ULONG)GA_Width; *tagptr++ = (ULONG)ng.ng_Width; *tagptr++ = (ULONG)GA_Height; *tagptr++ = (ULONG)ng.ng_Height; *tagptr++ = (ULONG)GA_Text; *tagptr++ = (ULONG)ng.ng_GadgetText; *tagptr++ = (ULONG)GA_TabCycle; *tagptr++ = (ULONG)TRUE; *tagptr++ = (ULONG)GA_Previous; *tagptr++ = (ULONG)gadget; *tagptr++ = (ULONG)ICA_TARGET; *tagptr++ = (ULONG)ICTARGET_IDCMP; *tagptr++ = (ULONG)TAG_MORE; *tagptr = (ULONG)tags; gadget = (struct Gadget *)NewObjectA(Config.Context.IClass, NULL, (struct TagItem *)boopsitags); break; case LISTVIEW_KIND: { struct TagItem *tag; // join last gadget (string gadget) with this listview ? if (tag = FindTagItem(GTLV_ShowSelected, (struct TagItem *)tags)) tag->ti_Data = (ULONG)gadget; } // fall through default: gadget = CreateGadgetA(kind, gadget, &ng, (struct TagItem *)tags); } if (gadget) { info->GadgetPtr[ID] = gadget; // skip to end of tags for this gadget while (*tags) { tags += 2; } // skip over TAG_END ++tags; } else break; } if (gadget) { // count gadgets info->Gadgets = 0; for (gadget = info->Context; gadget; gadget = gadget->NextGadget) ++info->Gadgets; // refresh gadgets AddGList(win, info->Context, 0, info->Gadgets, NULL); RefreshPage(info); RefreshGadgets(info->Context, info->Window, NULL); GT_RefreshWindow(info->Window, NULL); // render strings if (layout->IntuiText) { struct IntuiText *itext; for (itext = layout->IntuiText; itext; itext = itext->NextText) { struct IntuiText it = *itext; // set rendering details it.ITextFont = &info->TextAttr; it.FrontPen = itext->FrontPen; it.BackPen = itext->BackPen; it.DrawMode = itext->DrawMode; it.IText = itext->IText; it.NextText = NULL; // find string position it.TopEdge = info->OffY + ScaleY(info, itext->TopEdge ); it.LeftEdge = info->OffX + ScaleX(info, itext->LeftEdge) + (ScaleX(info, IntuiTextLength(itext)) - IntuiTextLength(&it)) / 2; PrintIText(info->Window->RPort, &it, 0, 0); } } return(TRUE); } else { FreeGadgets(info->Context); info->Context = NULL; } } } } else Warn(Assert, (APTR)__LINE__); CloseUserInterface(); return(FALSE); } /* -------------------------------- DetachGadgets ------------------------------ Detach gadgets from window */ void DetachGadgets(struct WindowSupportInfo *info, BOOL fillbackground) { DiscardInputEvents(info->Window); if (info->Context) { struct Window *win = info->Window; // save current state of gadgets ReadPage(info); // detach and free gadgets RemoveGadgetList(win, info->Context, info->Gadgets); FreeGadgets(info->Context); memset(info->GadgetPtr, 0, sizeof(info->GadgetPtr)); info->Context = NULL; // erase window if (fillbackground) { SetAPen (win->RPort, 0); RectFill(win->RPort, win->BorderLeft, win->BorderTop, win->Width - win->BorderRight - 1, win->Height - win->BorderBottom - 1); } } info->Layout = NULL; } /* ------------------------------- RemoveGadgetList ---------------------------- Fixes RemoveGList() bug (NULL-terminates last gadget in list) */ void RemoveGadgetList(win, gadget, numgad) struct Window *win; struct Gadget *gadget; UWORD numgad; { if (numgad) { RemoveGList(win, gadget, numgad); // terminate removed list while (gadget) { if (--numgad) { gadget = gadget->NextGadget; } else break; } if (gadget) gadget->NextGadget = NULL; } } /* -------------------------------- RefreshPage -------------------------------- Refresh gadgets */ void RefreshPage(struct WindowSupportInfo *info) { struct Options *options; if (options = info->Options) { struct Syntax *syntax; BOOL show[OPTIONS_MAXIMUM]; memset(show, TRUE, sizeof(show)); // loop through syntax table for (syntax = Syntax; syntax->ID < OPTIONS_MAXIMUM; ++syntax) { // option visible ? if (syntax->Page == info->Page) { UWORD ID = syntax->ID; // option not yet refreshed ? if (show[ID]) { struct Gadget *gadget; show[ID] = FALSE; // find gadget associated with option if (gadget = info->GadgetPtr[syntax->GadgetID]) { // validate gadget type if (info->Layout->Types[gadget->GadgetID] == syntax->GadgetType) { struct Value *value = &info->Options->Values[ID]; switch (syntax->GadgetType) { case CYCLE_KIND: { UWORD number = GetValueNumber(value); SetGadgetAttrs(gadget, info->Window, NULL, GTCY_Active, number, TAG_DONE); } break; case STRING_KIND: case TEXT_KIND: { UBYTE *string = GetValueString(value); if (string == NULL) string = ""; if (syntax->GadgetType == TEXT_KIND) GT_SetGadgetAttrs(gadget, info->Window, NULL, GTTX_Text , string, TAG_DONE); else GT_SetGadgetAttrs(gadget, info->Window, NULL, GTST_String, string, TAG_DONE); } break; case INTEGER_KIND: { UWORD number = GetValueNumber(value); GT_SetGadgetAttrs(gadget, info->Window, NULL, GTIN_Number, number, TAG_DONE); } break; case LISTVIEW_KIND: { struct List *list = GetValueList(value); GT_SetGadgetAttrs(gadget, info->Window, NULL, GTLV_Labels, list, TAG_DONE); } break; default: Warn(Assert, (APTR)__LINE__); } } else Warn(Assert, (APTR)__LINE__); } else Warn(Assert, (APTR)__LINE__); show[ID] = FALSE; } } } } RefreshGhosting(info); } /* ------------------------------ RefreshGhosting ------------------------------ Update gadget ghosting */ void RefreshGhosting(struct WindowSupportInfo *info) { struct Gadget **gadgets; UWORD gadgetID; // examine visible gadgets gadgets = info->GadgetPtr; for (gadgetID = 0; gadgetID < info->Gadgets; ++gadgetID) { struct Connectivity *connectivity; // loop through connectivity rules for (connectivity = Connectivity; connectivity->Page < PAGE_MAXIMUM; ++connectivity) { // does connectivity rule apply to next gadget ? if ((connectivity->Page == info->Page) && (connectivity->GadgetID == gadgetID)) { struct Gadget *gadget; struct Gadget *target; UWORD targettype; gadget = gadgets[gadgetID]; if (target = gadgets[connectivity->TargetID]) targettype = info->Layout->Types[connectivity->TargetID]; else targettype = UNDEFINED; if (gadget) { switch (connectivity->Action) { case ACTION_DEL: case ACTION_EDIT: { if (targettype == LISTVIEW_KIND) { ULONG selected = UNDEFINED; GT_GetGadgetAttrs(target, info->Window, NULL, GTLV_Selected, &selected, TAG_DONE); GT_SetGadgetAttrs(gadget, info->Window, NULL, GA_Disabled, (selected == (ULONG)~0), TAG_DONE); } else Warn(Assert, (APTR)__LINE__); } break; } } else Warn(Assert, (APTR)__LINE__); } } } } /* --------------------------------- ReadPage ---------------------------------- Read current state of gadgets */ void ReadPage(struct WindowSupportInfo *info) { struct Options *options; if (options = info->Options) { UWORD gadgetID; // examine visible gadgets for (gadgetID = 0; gadgetID < info->Gadgets; ++gadgetID) { struct Syntax *syntax; // loop through syntax table and find rule for next gadget for (syntax = Syntax; syntax->ID < OPTIONS_MAXIMUM; ++syntax) { // option visible and associated with gadget ? if ((syntax->Page == info->Page) && (syntax->GadgetID == gadgetID)) { struct Gadget *gadget; if (gadget = info->GadgetPtr[gadgetID]) { // validate gadget type if (info->Layout->Types[gadgetID] == syntax->GadgetType) { // copy gadget state to option struct Value *value = &info->Options->Values[syntax->ID]; switch (syntax->GadgetType) { case CYCLE_KIND: { ULONG active; GetAttr(GTCY_Active, gadget, &active); SetValueNumber(value, active); } break; case STRING_KIND: { ULONG string; GT_GetGadgetAttrs(gadget, info->Window, NULL, GTST_String, &string, TAG_DONE); SetValueString(value, (UBYTE *)string); } break; case TEXT_KIND: { ULONG string; GT_GetGadgetAttrs(gadget, info->Window, NULL, GTTX_Text, &string, TAG_DONE); SetValueString(value, (UBYTE *)string); } break; case INTEGER_KIND: { ULONG number; GT_GetGadgetAttrs(gadget, info->Window, NULL, GTIN_Number, &number, TAG_DONE); SetValueNumber(value, number); } break; } } else Warn(Assert, (APTR)__LINE__); } // examine next gadget break; } } } } } /* ----------------------------------- Warn ------------------------------------ Show error message */ void Warn(UBYTE *template, APTR data) { struct EasyStruct easyStruct; easyStruct.es_StructSize = sizeof(struct EasyStruct); easyStruct.es_Flags = 0; easyStruct.es_Title = PROGRAMNAME; easyStruct.es_GadgetFormat = "Ok"; if (strchr(template, '%')) { UBYTE *message; if (message = (UBYTE *)AllocVec(strlen(template) + MAX_PATHLEN, MEMF_ANY)) { sprintf(message, template, data); easyStruct.es_TextFormat = message; EasyRequestArgs(NULL, &easyStruct, NULL, NULL); FreeVec(message); } } else { easyStruct.es_TextFormat = template; EasyRequestArgs(NULL, &easyStruct, NULL, NULL); } } /// /// "gadgets" /* --------------------------- DefaultGadgetHandler ---------------------------- Process click on gadget */ void DefaultGadgetHandler(struct WindowSupportInfo *info, UWORD gadgetID) { struct Connectivity *connectivity; BOOL refresh; refresh = FALSE; // loop through connectivity rules for (connectivity = Connectivity; connectivity->Page < PAGE_MAXIMUM; ++connectivity) { // does connectivity rule apply to next gadget ? if ((connectivity->Page == info->Page) && (connectivity->GadgetID == gadgetID)) { struct Window *window; struct Gadget *gadget; struct Gadget *target; UWORD targettype; window = info->Window; gadget = info->GadgetPtr[gadgetID]; // target gadget ? if (target = info->GadgetPtr[connectivity->TargetID]) targettype = info->Layout->Types[connectivity->TargetID]; else targettype = UNDEFINED; if (gadget) { UBYTE *name = "unnamed"; switch (connectivity->Action) { case ACTION_REFRESH: refresh = TRUE; break; case ACTION_REQFILE: case ACTION_REQFILENAME: case ACTION_REQFOLDER: { // choose default folder for file requester (NULL = last path) UBYTE *folder = NULL; #ifdef TARGET_VBCC switch (info->Page) { case PAGE_INDEX: if (target->GadgetID == GD_VCCCONFIG) folder = "vbcc:config"; break; } #endif name = RequestPath("Choose...", folder, "", connectivity->Action == ACTION_REQFOLDER, connectivity->Action == ACTION_REQFILENAME); } if (name == NULL) break; // fall through case ACTION_POP: // get name for new entry via pop-up button ? if (connectivity->Action == ACTION_POP) { UBYTE **labels; ULONG active; GetAttr(GTCY_Labels, gadget, (ULONG *)&labels); GetAttr(GTCY_Active, gadget, (ULONG *)&active); if (labels) name = labels[active]; } // fall through case ACTION_ADD: case ACTION_DEL: case ACTION_EDIT: if (name) { if (targettype == LISTVIEW_KIND) { struct Node *selected; struct List *list; ULONG active; ULONG labels; UWORD ID; if (ExamineListview(info, target, &list, &selected, &active, &labels, &ID)) { switch (connectivity->Action) { case ACTION_POP: case ACTION_ADD: case ACTION_REQFILE: case ACTION_REQFOLDER: { struct Node *node; if (node = (struct Node *)CreateNode(name)) { GT_SetGadgetAttrs(target, window, NULL, GTLV_Labels, ~0, TAG_DONE); if (selected) { Insert (list, node, selected); ++active; } else { AddTail(list, node); active = labels; } GT_SetGadgetAttrs(target, window, NULL, GTLV_Labels, list, GTLV_Selected, active, GTLV_Top, active, TAG_DONE); refresh = TRUE; } } break; case ACTION_DEL: if (selected) { GT_SetGadgetAttrs(target, window, NULL, GTLV_Labels, ~0, TAG_DONE); FreeNode(selected); GT_SetGadgetAttrs(target, window, NULL, GTLV_Labels, list, TAG_DONE); refresh = TRUE; } break; case ACTION_EDIT: if (selected) { ULONG string = (ULONG)NULL; GT_GetGadgetAttrs(gadget, window, NULL, GTST_String, &string, TAG_DONE); if (string) { GT_SetGadgetAttrs(target, window, NULL, GTLV_Labels, ~0, TAG_DONE); NameNode(selected, (UBYTE *)string); GT_SetGadgetAttrs(target, window, NULL, GTLV_Labels, list, TAG_DONE); } } break; } } } else if (targettype == STRING_KIND) { GT_SetGadgetAttrs(target, window, NULL, GTST_String, name, TAG_DONE); } else Warn(Assert, (APTR)__LINE__); } break; } } else Warn(Assert, (APTR)__LINE__); } } if (refresh) RefreshGhosting(info); } /* ------------------------------ ExamineListview ------------------------------ Get listview details (in <list>, <selected>, <active>, <labels> and <ID>). */ BOOL ExamineListview(struct WindowSupportInfo *info, struct Gadget *gadget, struct List **list, struct Node **selected, ULONG *active, ULONG *labels, UWORD *ID) { struct Syntax *syntax; // find compiler option associated with listview for (syntax = Syntax; syntax->ID < OPTIONS_MAXIMUM; ++syntax) { if ((syntax->Page == info->Page) && (syntax->GadgetID == gadget->GadgetID)) { *ID = syntax->ID; // get list and ordinal number of selected node GT_GetGadgetAttrs(gadget, info->Window, NULL, GTLV_Labels, list, GTLV_Selected, active, TAG_DONE); // count labels (and find selected node) if (*list) { struct Node *node; *labels = 0; *selected = NULL; for (node = (*list)->lh_Head; node->ln_Succ; node = node->ln_Succ) { if ((*labels)++ == *active) *selected = node; } return(TRUE); } } } Warn(Assert, (APTR)__LINE__); return(FALSE); } /// /// "lists" /* -------------------------------- CreateNode --------------------------------- Create node structure */ struct Node * CreateNode(UBYTE *name) { struct Node *node; if (node = AllocVec(sizeof(struct Node), MEMF_ANY | MEMF_CLEAR)) { if (NameNode(node, name) == FALSE) { FreeVec(node); node = NULL; } } return(node); } /* --------------------------------- NameNode ----------------------------------- (Re-)name a node structure */ BOOL NameNode(struct Node *node, UBYTE *name) { UBYTE *buffer; if (buffer = (UBYTE *)AllocVec(strlen(name) + 1, MEMF_ANY)) { strcpy(buffer, name); if (node->ln_Name) FreeVec(node->ln_Name); node->ln_Name = buffer; return(TRUE); } else return(FALSE); } /* --------------------------------- FreeNodes --------------------------------- Free all nodes attached to <list> */ void FreeNodes(struct List *list) { struct Node *node, *next; for (node = list->lh_Head; node && (next = node->ln_Succ); node = next) { FreeNode(node); } } /* --------------------------------- FreeNode ---------------------------------- Unlink and free a node */ void FreeNode(struct Node *node) { Remove(node); if (node->ln_Name) FreeVec(node->ln_Name); FreeVec(node); } /* --------------------------------- FreeDupes --------------------------------- Remove <nodes> from <list> that match <pattern>. This function will remove true matches and duplicates of the form "-option=*" (matching option name followed by variable argument). */ void FreeDupes(struct List *list, UBYTE *pattern) { struct Node *node; struct Node *next; UBYTE *fillin; UWORD len; // option followed by argument or unqualified option ? if (fillin = strchr(pattern, '=')) len = (fillin - pattern + 1); else len = strlen(pattern); for (node = list->lh_Head; next = node->ln_Succ; node = next) { if (node->ln_Name) { if (strlen(node->ln_Name) >= len) { if (memcmp(node->ln_Name, pattern, len) == 0) { FreeNode(node); } } } else FreeNode(node); } } /// /// "asl" /* ---------------------------------- RequestPath ------------------------------ Request file or folder, return selected name (static string) */ UBYTE * RequestPath(UBYTE *title, UBYTE *path, UBYTE *file, BOOL foldersonly, BOOL filenameonly) { static UBYTE lastpath[MAX_PATHLEN + 1]; struct FileRequester *fileReq; if (path == NULL) path = lastpath; fileReq = (struct FileRequester *)AllocAslRequestTags(ASL_FileRequest, ASLFR_PubScreenName, Config.Pubscreen, ASLFR_TitleText, title, ASLFR_InitialDrawer, path, ASLFR_InitialFile, file, ASLFR_DrawersOnly, foldersonly, ASLFR_DoMultiSelect, FALSE, ASLFR_DoSaveMode, FALSE, ASLFR_RejectIcons, TRUE, TAG_DONE ); if (fileReq) { if (AslRequest(fileReq, NULL)) { static UBYTE result[MAX_PATHLEN + 1]; strncpy(lastpath, fileReq->fr_Drawer, MAX_PATHLEN); if (filenameonly) { strncpy(result, fileReq->fr_File, MAX_PATHLEN); } else { strncpy(result, fileReq->fr_Drawer, MAX_PATHLEN); // make path absolute ? if (strchr(fileReq->fr_Drawer, ':') == NULL) { BPTR lock; if (lock = Lock(fileReq->fr_Drawer, ACCESS_READ)) { NameFromLock(lock, result, MAX_PATHLEN); UnLock(lock); } } AddPart(result, fileReq->fr_File, MAX_PATHLEN); } FreeAslRequest(fileReq); return(result); } } return(NULL); } /// /// "misc" /* ---------------------------------- Tackon ----------------------------------- Append <file> to <path> and return static result */ UBYTE * Tackon(UBYTE *path, UBYTE *file) { static UBYTE buffer[MAX_PATHLEN + 1]; strcpy(buffer, path); if (AddPart(buffer, file, sizeof(buffer))) { return(buffer); } else return(NULL); } ///